![[计算机软件及应用]《移动通信软件编程基础—JAVA语言》第11章_第1页](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/16fbeaec-96b4-4349-bcce-e7227b2f3956/16fbeaec-96b4-4349-bcce-e7227b2f39561.gif)
![[计算机软件及应用]《移动通信软件编程基础—JAVA语言》第11章_第2页](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/16fbeaec-96b4-4349-bcce-e7227b2f3956/16fbeaec-96b4-4349-bcce-e7227b2f39562.gif)
![[计算机软件及应用]《移动通信软件编程基础—JAVA语言》第11章_第3页](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/16fbeaec-96b4-4349-bcce-e7227b2f3956/16fbeaec-96b4-4349-bcce-e7227b2f39563.gif)
![[计算机软件及应用]《移动通信软件编程基础—JAVA语言》第11章_第4页](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/16fbeaec-96b4-4349-bcce-e7227b2f3956/16fbeaec-96b4-4349-bcce-e7227b2f39564.gif)
![[计算机软件及应用]《移动通信软件编程基础—JAVA语言》第11章_第5页](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/16fbeaec-96b4-4349-bcce-e7227b2f3956/16fbeaec-96b4-4349-bcce-e7227b2f39565.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 移动通信软件编程基础 Java语言IC-MSP知识回顾I/OI/O输入输入 与输出与输出 基本文件操作基本文件操作字节流字节流字符流字符流FileFile类类使用流使用流FileInputStreamFileInputStream类和类和FileOutputStreamFileOutputStream类类控制台输入流控制台输入流System.inSystem.in过滤流过滤流缓冲流缓冲流包装流包装流字节流和字符流的比较字节流和字符流的比较FileReaderFileReader类与类与BufferedReaderBufferedReader类类FileWriterFileWriter类与类与
2、BufferedReaderBufferedReader类类IC-MSP11多线程第章IC-MSP本章目标线程的基本概念线程的基本概念JavaJava中线程的实现方法中线程的实现方法线程的优先级线程的优先级J Javaava中同步的实现中同步的实现 死锁及其解决方法死锁及其解决方法IC-MSP进程的基本概念 进程进程1 1 存储器存储器 动态堆动态堆 静态数据静态数据 程序代码程序代码 存储器存储器 堆栈堆栈 进程进程2 2 存储器存储器 动态堆动态堆 静态数据静态数据 程序代码程序代码 存储器存储器 堆栈堆栈 进程间的关系比较疏远;进程间的关系比较疏远;各个进程是在自己独有的地址空间内执行各
3、个进程是在自己独有的地址空间内执行。IC-MSP线程的基本概念 进程进程 动态堆动态堆 静态数据静态数据 程序代码程序代码 寄存器寄存器 堆栈堆栈 寄存器寄存器 堆栈堆栈 存储器存储器线程线程1 1线程线程2 2IC-MSP线程的基本概念v线程是进行中的实体,一个进程中可以包含一个或多线程是进行中的实体,一个进程中可以包含一个或多个线程。个线程。v一个线程在执行期间同样有一个开始,一个执行序列一个线程在执行期间同样有一个开始,一个执行序列和一个结束点。和一个结束点。v单个线程不是一个程序,并不能依靠自身单独执行,单个线程不是一个程序,并不能依靠自身单独执行,它必须在程序中执行。它必须在程序中执
4、行。v基于线程的多任务处理环境中,线程是最小的处理单基于线程的多任务处理环境中,线程是最小的处理单位。实现多任务需要多线程。位。实现多任务需要多线程。IC-MSP线程的基本概念多线程:多线程:v在在JavaJava中,一个应用程序可以包含多个线程。每个中,一个应用程序可以包含多个线程。每个线程执行特定的任务,并可与其他线程并发执行。线程执行特定的任务,并可与其他线程并发执行。 v多线程使系统的空转时间减少,提高多线程使系统的空转时间减少,提高CPUCPU利用率。利用率。v多线程编程环境用方便的模型隐藏多线程编程环境用方便的模型隐藏CPUCPU在任务间切换在任务间切换的事实。的事实。IC-MSP
5、主线程public class MainThreadDemo public static void main(String args) /获得主线程的一个引用获得主线程的一个引用 Thread t = Thread.currentThread(); /输出线程信息输出线程信息 System.out.println(t); 运行运行结果结果输出默认的线程信息输出默认的线程信息Threadmain,5,mainThreadmain,5,mainIC-MSPThread类的常用方法方法方法说明说明void run()运行一个线程运行一个线程void start()启动线程并调用启动线程并调用run方
6、法方法static currentThread()返回当前执行的线程返回当前执行的线程void join()等待线程终止等待线程终止final void setName(String name)改变线程的内部名称改变线程的内部名称final String getName()返回线程的内部名称返回线程的内部名称static void sleep(long millis)设置线程为休眠状态设置线程为休眠状态IC-MSPThread类常用方法的使用类常用方法的使用public class CreateThreadDemopublic static void main(String args)Thre
7、ad T = Thread.currentThread();System.out.println(T);T.setName(ThreadNew);System.out.println(T);for(int i = 0; i10; i+)System.out.println(i);try T.sleep(1000);catch(InterruptedException ie) ie.printStackTrace(); IC-MSP创建一个线程类class MyThread extends Thread public MyThread(String name)super(name); publi
8、c void run() for(int i = 0; i10; i+) System.out.println(实现线程实现线程: + this); try sleep(1000); catch(InterruptedException ie) ie.printStackTrace(); public class CreateThreadDemo public static void main(String args) MyThread T = new MyThread( study); T.start(); IC-MSP线程的状态v线程的状态:新生、就绪、运行、睡眠、挂起、阻塞、线程的状态:
9、新生、就绪、运行、睡眠、挂起、阻塞、死亡七种状态,线程从新生到死亡的状态变化过程称为生死亡七种状态,线程从新生到死亡的状态变化过程称为生命周期命周期 IC-MSP线程状态的实现新建新建建立了一个线程对象线程处于新建状态建立了一个线程对象线程处于新建状态就绪就绪在创建线程后,它将处于就绪状态在创建线程后,它将处于就绪状态运行运行线程在开始执行时进入运行状态线程在开始执行时进入运行状态睡眠睡眠线程的执行可通过使用线程的执行可通过使用sleep()sleep()方法来暂时中止方法来暂时中止等待等待如果调用了如果调用了wait()wait()方法,线程将处于等待状态方法,线程将处于等待状态挂起挂起su
10、spend()suspend()方法使用线程处于挂起状态方法使用线程处于挂起状态恢复恢复resume()resume()方法可以使用挂起的线程方法可以使用挂起的线程阻塞阻塞在线程等待一个事件时(例如输入在线程等待一个事件时(例如输入/ /输出操作),输出操作),就称其处于阻塞状态就称其处于阻塞状态死亡死亡在在run()run()方法已完成执行或其方法已完成执行或其stop()stop()方法被调用方法被调用之后,线程就处于死亡状态之后,线程就处于死亡状态IC-MSP线程状态的实现class MyThread extends Thread public MyThread(String name)
11、super(name); System.out.println(线程就绪线程就绪); public void start()System.out.println(线程启动线程启动);run(); public void run() System.out.println(线程运行线程运行);try System.out.println(线程将要休眠线程将要休眠10秒秒); sleep(1000); System.out.println(线程休眠线程休眠10秒继续运行秒继续运行);catch(InterruptedException ie) ie.printStackTrace(); public
12、 class CreateThreadDemo public static void main(String args) MyThread T = new MyThread(study); T.start(); System.out.println(线程死亡线程死亡); IC-MSP暂停线程的方法线程让出线程让出CPU时间片的方法:时间片的方法:无法获得无法获得CUP时间:线程优先级比较低时间:线程优先级比较低线程休眠:使用线程休眠:使用sleep()方法方法线程显式出让线程显式出让CUP控制权:调用控制权:调用yield()方法方法线程等待:调用线程等待:调用wait()方法方法阻塞:线程由
13、于等待一个文件阻塞:线程由于等待一个文件I/O事件事件IC-MSP线程优先级class ChildThread extends Threadpublic void run()while(true)System.out.println(this + 子线程在运行子线程在运行);yield();public class ThreadPriorityDemopublic static void main(String args)Thread MainT = Thread.currentThread();ChildThread ChildT = new ChildThread();ChildT.set
14、Priority(Thread.MAX_PRIORITY);ChildT.start();for(int i = 0; i1000; i+)System.out.println(MainT + 主线程在运行主线程在运行);IC-MSPJava中线程的实现方法v 继承继承Thread类类 创建一个新类来继承创建一个新类来继承Thread类,然后重载类,然后重载run()方法,这个方法,这个run方法是新线程的入口。方法是新线程的入口。v 实现实现Runnable接口接口 通过实现通过实现Runnable接口的方法创建一个对象的接口的方法创建一个对象的线程。为了实现线程。为了实现Runnable接
15、口,类必须定义一个接口,类必须定义一个名为名为 run 的无参数的方法的无参数的方法 。IC-MSP实现Runnable接口class MyFriend public void sayHello()System.out.println(朋友!好久不见!朋友!好久不见!); class Welcome extends MyFriend implements Runnable public void run() while(true) sayHello(); tryThread.sleep(3000); catch(InterruptedException ie)ie.printStackTrac
16、e(); IC-MSP使用RunnableRunnable实现线程的特点v实现实现Runnable接口方法把虚拟接口方法把虚拟CPU同程序代码、数据同程序代码、数据有效分离,较好的体现了面向对象的设计思想。有效分离,较好的体现了面向对象的设计思想。v实现实现Runnable接口方法避免由于接口方法避免由于Java的单继承特性来的单继承特性来来的局限。来的局限。v实现实现Runnable接口方法中代码能够被多个线程共享,接口方法中代码能够被多个线程共享,代码与数据是独立的,有利于程序的健壮性。代码与数据是独立的,有利于程序的健壮性。IC-MSPclass ThreadSale implement
17、s Runnable private int tickets=100; public void run() while(true) if(tickets 0) try Thread.sleep(5); catch(InterruptedException ie) ie.printStackTrace(); System.out.println(Thread.currentThread().getName() + 销售票号为销售票号为: + tickets- -); public class TicketsSalepublic static void main(String args)Threa
18、dSale T = new ThreadSale();Thread T1 = new Thread(T);Thread T2 = new Thread(T);Thread T3 = new Thread(T);Thread T4 = new Thread(T);T1.start();T2.start();T3.start();T4.start();使用Runnable接口实现多窗口售票IC-MSP线程同步v程序中不能有多个线程同时在两句代码之间执行,程序中不能有多个线程同时在两句代码之间执行,这就是线程同步。这就是线程同步。v为了确保在任何时间点一个共享的资源只能被一个为了确保在任何时间点一个
19、共享的资源只能被一个线程使用,就需要使用线程使用,就需要使用“同步同步”。v实现同步的方法有两种:实现同步的方法有两种:同步代码块同步代码块同步方法同步方法IC-MSP同步代码块v同步代码块模式如下所示,其中同步代码块模式如下所示,其中Object可以是任意可以是任意的一个对象。的一个对象。 synchronized(object) /要同步的语句要同步的语句 IC-MSP使用此方法解决售票系统的问题 class ThreadSale implements Runnable private int tickets = 100; Object obj = new Object();/同步块对象同
20、步块对象,任意对象均可任意对象均可 public void run() synchronized(obj) if(tickets = 0) break; System.out.println(Thread.currentThread().getName() + 销售票号为销售票号为: + tickets- -); IC-MSP同步方法v同步方法模式如下所示,其中同步方法模式如下所示,其中method为要实现为要实现同步的方法。同步的方法。 synchronized void method() /要同步的语句要同步的语句 IC-MSP使用同步方法解决售票系统问题 class ThreadSale
21、 implements Runnable private int tickets = 100; public void run() sell(); synchronized public void sell() if(tickets 0) System.out.println(Thread.currentThread().getName() + 销售票号为销售票号为: + tickets- -); IC-MSP死锁v当两个线程循环依赖于一对同步对象时将发生死锁当两个线程循环依赖于一对同步对象时将发生死锁v死锁是很难调试的错误死锁是很难调试的错误IC-MSP死锁的解决方法vwait-notify
22、wait-notify机制是解决由于使用机制是解决由于使用synchronizedsynchronized方方法或块产生的死锁问题,实现线程间的通信。法或块产生的死锁问题,实现线程间的通信。vwaitwait方法:线程对象在调用方法:线程对象在调用sleep( )sleep( )后并不释放后并不释放对象的锁,调用对象的锁,调用wait( )wait( )的时候会释放对象的锁。的时候会释放对象的锁。vnotifynotify方法:唤醒同一对象监视器中调用方法:唤醒同一对象监视器中调用waitwait的的第一个线程。被通知的线程重新获得监视器的锁定第一个线程。被通知的线程重新获得监视器的锁定继续运
23、行。继续运行。vnotifyAllnotifyAll方法:唤醒同一对象监视器中调用方法:唤醒同一对象监视器中调用waitwait的所有线程,具有最高优先级的线程首先被唤醒并的所有线程,具有最高优先级的线程首先被唤醒并执行。执行。IC-MSPwait-notify机制示例机制示例class ThreadB extends Thread int total = 0; public void run() synchronized(this) for(int i = 0;i = 100; i+) total += i; System.out.println(计算完成计算完成.); notify();
24、public void synModify() public void synModify() synchronized(this) try System.out.println(在此等待直到计算完成在此等待直到计算完成.); wait(); System.out.println(返回继续执行返回继续执行!); catch (InterruptedException e) e.printStackTrace(); System.out.println(显示结果显示结果: + total); IC-MSPwait-notify机制示例机制示例 public class WaitNotifyDem
25、o public static void main(String args) ThreadB b = new ThreadB();b.start(); b.synModify(); IC-MSP生产者生产者/ /消费者问题消费者问题 /生产者线程类生产者线程类class Producer extends Thread private CubbyHole cubbyhole; private int number; public Producer(CubbyHole c, int number) cubbyhole = c; this.number = number; public void r
26、un() public void run() for (int i = 0; i 10; i+) int temp = (int)(Math.random() * 1000); cubbyhole.put(temp); System.out.println(Producer # + this.number + put: + temp); try sleep(int)(Math.random() * 1000); catch e.printStackTrace(); IC-MSP生产者生产者/ /消费者问题消费者问题 /消费者线程类消费者线程类 class Consumer extends Th
27、read private CubbyHole cubbyhole; private int number; public Consumer(CubbyHole c, int number) cubbyhole = c; this.number = number; public void run() int value = 0; for (int i = 0; i 10; i+) value = cubbyhole.get(); System.out.println(Consumer # + this.number + get: + value); IC-MSP生产者生产者/ /消费者问题消费者
28、问题 /共享数据类共享数据类-模拟实现仓库模拟实现仓库class CubbyHole private int seq; private boolean available = false; /取数据的同步方法取数据的同步方法get()-取得可消费产品取得可消费产品 public synchronized int get() /存放数据的同步方法存放数据的同步方法put()-放置可消费产品放置可消费产品 public synchronized void put(int value) public synchronized int get() while( available=false ) try wait( ); /条件不符合,则条件不符合,则wait catch( InterruptedException e ) e.printStack
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年法律行业智能法律顾问系统研发可行性报告
- 2025年智慧城市安全质量标准评估研究报告
- 互联网医疗2025年营业额预测可行性分析报告
- 2025年高端制造行业营销方案可行性研究报告
- 天津市自立中学九年级上册压轴题数学模拟试卷含详细答案
- 定期存款协议书
- 挖机买卖协议书
- 债务协议书重组
- 个人付款协议书
- 委托网站设计发布广告合同5篇
- 2025年铁路客运值班员(高级)职业技能鉴定参考试题库(含答案)
- T-CALC 007-2025 重症监护病房成人患者人文关怀规范
- 供热通风与空调工程技术单选题100道及答案
- 大学英语四级词汇完整表(打印背诵版)
- 开封市第二届职业技能大赛健康和社会照护项目技术文件(世赛选拔项目)
- 建筑工地安全施工规范
- 2024至2030年全球及中国海洋休闲设备行业市场分析及投资建议报告
- QFD质量功能展开的未来发展趋势
- 燃气行业数字化转型研究
- 超声引导下神经阻滞
- 围墙新建及改造工程施工组织设计(技术标)
评论
0/150
提交评论