




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
移动通信软件编程基础 Java语言 知识回顾 I O输入与输出 基本文件操作 字节流 字符流 File类 使用流 FileInputStream类和FileOutputStream类 控制台输入流System in 过滤流 缓冲流 包装流 字节流和字符流的比较 FileReader类与BufferedReader类 FileWriter类与BufferedReader类 11 多线程 第 章 本章目标 线程的基本概念 Java中线程的实现方法 线程的优先级 Java中同步的实现 死锁及其解决方法 进程的基本概念 进程1 存储器 动态堆 静态数据 程序代码 存储器 堆栈 进程2 存储器 动态堆 静态数据 程序代码 存储器 堆栈 进程间的关系比较疏远 各个进程是在自己独有的地址空间内执行 线程的基本概念 进程 动态堆 静态数据 程序代码 寄存器 堆栈 寄存器 堆栈 存储器 线程1 线程2 线程的基本概念 线程是进行中的实体 一个进程中可以包含一个或多个线程 一个线程在执行期间同样有一个开始 一个执行序列和一个结束点 单个线程不是一个程序 并不能依靠自身单独执行 它必须在程序中执行 基于线程的多任务处理环境中 线程是最小的处理单位 实现多任务需要多线程 线程的基本概念 多线程 在Java中 一个应用程序可以包含多个线程 每个线程执行特定的任务 并可与其他线程并发执行 多线程使系统的空转时间减少 提高CPU利用率 多线程编程环境用方便的模型隐藏CPU在任务间切换的事实 主线程 publicclassMainThreadDemo publicstaticvoidmain String args 获得主线程的一个引用Threadt Thread currentThread 输出线程信息System out println t 运行结果 输出默认的线程信息Thread main 5 main Thread类的常用方法 Thread类常用方法的使用 publicclassCreateThreadDemo publicstaticvoidmain String args ThreadT Thread currentThread System out println T T setName ThreadNew System out println T for inti 0 i 10 i System out println i try T sleep 1000 catch InterruptedExceptionie ie printStackTrace 创建一个线程类 classMyThreadextendsThread publicMyThread Stringname super name publicvoidrun for inti 0 i 10 i System out println 实现线程 this try sleep 1000 catch InterruptedExceptionie ie printStackTrace publicclassCreateThreadDemo publicstaticvoidmain String args MyThreadT newMyThread study T start 线程的状态 线程的状态 新生 就绪 运行 睡眠 挂起 阻塞 死亡七种状态 线程从新生到死亡的状态变化过程称为生命周期 线程状态的实现 新建 建立了一个线程对象线程处于新建状态就绪 在创建线程后 它将处于就绪状态运行 线程在开始执行时进入运行状态睡眠 线程的执行可通过使用sleep 方法来暂时中止等待 如果调用了wait 方法 线程将处于等待状态挂起 suspend 方法使用线程处于挂起状态恢复 resume 方法可以使用挂起的线程阻塞 在线程等待一个事件时 例如输入 输出操作 就称其处于阻塞状态死亡 在run 方法已完成执行或其stop 方法被调用之后 线程就处于死亡状态 线程状态的实现 classMyThreadextendsThread publicMyThread Stringname super name System out println 线程就绪 publicvoidstart System out println 线程启动 run publicvoidrun System out println 线程运行 try System out println 线程将要休眠10秒 sleep 1000 System out println 线程休眠10秒继续运行 catch InterruptedExceptionie ie printStackTrace publicclassCreateThreadDemo publicstaticvoidmain String args MyThreadT newMyThread study T start System out println 线程死亡 暂停线程的方法 线程让出CPU时间片的方法 无法获得CUP时间 线程优先级比较低线程休眠 使用sleep 方法线程显式出让CUP控制权 调用yield 方法线程等待 调用wait 方法阻塞 线程由于等待一个文件I O事件 线程优先级 classChildThreadextendsThread publicvoidrun while true System out println this 子线程在运行 yield publicclassThreadPriorityDemo publicstaticvoidmain String args ThreadMainT Thread currentThread ChildThreadChildT newChildThread ChildT setPriority Thread MAX PRIORITY ChildT start for inti 0 i 1000 i System out println MainT 主线程在运行 Java中线程的实现方法 继承Thread类创建一个新类来继承Thread类 然后重载run 方法 这个run方法是新线程的入口 实现Runnable接口通过实现Runnable接口的方法创建一个对象的线程 为了实现Runnable接口 类必须定义一个名为run的无参数的方法 实现Runnable接口 classMyFriend publicvoidsayHello System out println 朋友 好久不见 classWelcomeextendsMyFriendimplementsRunnable publicvoidrun while true sayHello try Thread sleep 3000 catch InterruptedExceptionie ie printStackTrace 使用Runnable实现线程的特点 实现Runnable接口方法把虚拟CPU同程序代码 数据有效分离 较好的体现了面向对象的设计思想 实现Runnable接口方法避免由于Java的单继承特性来来的局限 实现Runnable接口方法中代码能够被多个线程共享 代码与数据是独立的 有利于程序的健壮性 classThreadSaleimplementsRunnable privateinttickets 100 publicvoidrun while true if tickets 0 try Thread sleep 5 catch InterruptedExceptionie ie printStackTrace System out println Thread currentThread getName 销售票号为 tickets publicclassTicketsSale publicstaticvoidmain String args ThreadSaleT newThreadSale ThreadT1 newThread T ThreadT2 newThread T ThreadT3 newThread T ThreadT4 newThread T T1 start T2 start T3 start T4 start 使用Runnable接口实现多窗口售票 线程同步 程序中不能有多个线程同时在两句代码之间执行 这就是线程同步 为了确保在任何时间点一个共享的资源只能被一个线程使用 就需要使用 同步 实现同步的方法有两种 同步代码块同步方法 同步代码块 同步代码块模式如下所示 其中Object可以是任意的一个对象 synchronized object 要同步的语句 使用此方法解决售票系统的问题 classThreadSaleimplementsRunnable privateinttickets 100 Objectobj newObject 同步块对象 任意对象均可publicvoidrun synchronized obj if tickets 0 break System out println Thread currentThread getName 销售票号为 tickets 同步方法 同步方法模式如下所示 其中method为要实现同步的方法 synchronizedvoidmethod 要同步的语句 使用同步方法解决售票系统问题 classThreadSaleimplementsRunnable privateinttickets 100 publicvoidrun sell synchronizedpublicvoidsell if tickets 0 System out println Thread currentThread getName 销售票号为 tickets 死锁 当两个线程循环依赖于一对同步对象时将发生死锁死锁是很难调试的错误 死锁的解决方法 wait notify机制是解决由于使用synchronized方法或块产生的死锁问题 实现线程间的通信 wait方法 线程对象在调用sleep 后并不释放对象的锁 调用wait 的时候会释放对象的锁 notify方法 唤醒同一对象监视器中调用wait的第一个线程 被通知的线程重新获得监视器的锁定继续运行 notifyAll方法 唤醒同一对象监视器中调用wait的所有线程 具有最高优先级的线程首先被唤醒并执行 wait notify机制示例 classThreadBextendsThread inttotal 0 publicvoidrun synchronized this for inti 0 i 100 i total i System out println 计算完成 notify publicvoidsynModify publicvoidsynModify synchronized this try System out println 在此等待直到计算完成 wait System out println 返回继续执行 catch InterruptedExceptione e printStackTrace System out println 显示结果 total wait notify机制示例 publicclassWaitNotifyDemo publicstaticvoidmain String args ThreadBb newThreadB b start b synModify 生产者 消费者问题 生产者线程类classProducerextendsThread privateCubbyHolecubbyhole privateintnumber publicProducer CubbyHolec intnumber cubbyhole c this number number publicvoidrun publicvoidrun for inti 0 i 10 i inttemp int Math random 1000 cubbyhole put temp System out println Producer this number put temp try sleep int Math random 1000 catch e printStackTrace 生产者 消费者问题 消费者线程类classConsumerextendsThread privateCubbyHolecubbyhole privateintnumber publicConsumer CubbyHolec intnumber cubbyhole c this number number publicvoidrun intvalue 0 for inti 0 i 10 i value cubbyhole get System out println Consumer this number get value 生产者 消费者问题 共享数据类 模拟实现仓库classCubbyHole privateintseq privatebooleanavailable false 取数据的同步方法get 取得可消费产品publicsynchronizedintget 存放数据的同步方法put 放置可消费产品publicsynchronizedvoidput intvalue publicsynchronizedintget while available false try wait 条件不符合 则wait catch InterruptedExceptione e p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钢结构施工防水与排水方案
- 消防设施消防系统数据同步方案
- 氢能产业园氢能产业市场的供应与需求分析
- 建筑工程项目临时用水与排水系统方案
- 混凝土施工中的原材料质量检测方案
- 施工人员培训方案
- 水电站安全知识培训课件讲座
- 知识点2.2熟悉色彩的体系设计构成设计色彩60课件
- 水电师傅基础知识培训课件
- 二零二五年园艺绿化苗木种植与养护合同样本
- 口腔医生岗前培训课件
- 小学一年级升二年级暑假数学作业-58套计算
- 驾考题库及答案大全
- 康复科疾病护理
- 4S店员工职业卫生培训
- 地下通道水泵房管理制度
- 溺水患者急救培训
- 2026版步步高大一轮高考数学复习讲义第十章 §10.1 计数原理与排列组合含答案
- 人力公司营销策划方案
- 医院医疗用房管理制度
- 股权代持协议终止协议书
评论
0/150
提交评论