![Java-第9章-多线程程序设计_第1页](http://file4.renrendoc.com/view12/M00/0E/01/wKhkGWXuUweAbdvHAAEbJ9EvEi4919.jpg)
![Java-第9章-多线程程序设计_第2页](http://file4.renrendoc.com/view12/M00/0E/01/wKhkGWXuUweAbdvHAAEbJ9EvEi49192.jpg)
![Java-第9章-多线程程序设计_第3页](http://file4.renrendoc.com/view12/M00/0E/01/wKhkGWXuUweAbdvHAAEbJ9EvEi49193.jpg)
![Java-第9章-多线程程序设计_第4页](http://file4.renrendoc.com/view12/M00/0E/01/wKhkGWXuUweAbdvHAAEbJ9EvEi49194.jpg)
![Java-第9章-多线程程序设计_第5页](http://file4.renrendoc.com/view12/M00/0E/01/wKhkGWXuUweAbdvHAAEbJ9EvEi49195.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
9多线程程序设计9.1引例:简单的多线程程序9.2线程概述9.3Java线程类和接口9.4线程调度与控制9.5线程的同步机制9.6应用实例:定时器9.1引例:简单的多线程程序【例9-1】简单的多线程程序FirstThread.java必须通过用户强制中断的方式才能结束,即MS-DOS方式下按Ctrl-C键,Eclipse平台下通过停止运行按钮9.2线程概述进程与线程多任务分时环境9.2线程概述多进程并发处理9.2线程概述多线程并发处理9.2线程概述Java程序运行在JVM下对于操作系统来说,JVM是系统中运行的众多进程之一每个运行在JVM下的Java程序都是JVM进程中的线程例如,执行Java应用程序会首先调用main()方法,此时生成一个被称为主线程的线程,主线程结束意味着main()方法运行结束9.2线程概述Java的程序是单线程的,但它提供了类和接口来实现多线程程序java.lang包中的Thread类和Runnable接口9.3Java线程类和接口9.3.1Thread类9.3.2Runnable接口9.3.1Thread类将类声明为Thread类的子类可以使Java程序能够多线程运行该子类必须覆盖Thread类的run()方法,将所有多线程代码放在run()方法中例如:publicclassMyThreadextendsThread{ ... publicvoidrun(){ ... }}9.3.1Thread类Thread类常用构造方法9.3.1Thread类Thread类常用成员方法9.3.1Thread类9.3.1Thread类【例9-2】可以和用户交互的多线程程序MyThread.java,MyThreadTest.java9.3.2Runnable接口Java只支持单重继承如果一个类继承了Thread类,就不能再继承其他类了对此,Java提供了另一种途经,通过实现Runnable接口来定义多线程类9.3.2Runnable接口Runnable接口中仅声明了run()方法:voidrun();实现Runnable接口的类必须实现run()方法,例如:publicclassMyRunnableimplementsRunnable{ publicvoidrun(){...}}Thread类就实现了Runnable接口,只不过run()方法体是空的9.3.2Runnable接口实现了Runnable接口的对象创立线程时,需要用它作为参数创立一个Thread类对象,之后如一般的Thread对象那样调用start()方法启动线程执行run()方法例如:MyRunnabler=newMyRunnable();Threadt=newThread(r);t.start();9.3.2Runnable接口【例9-3】使用Runnable接口的多线程程序MyRunnable.java,MyRunnableTest.java9.4线程调度与控制9.4.1线程状态9.4.2线程调度9.4.3线程控制9.4.1线程状态线程不同状态之间的转换9.4.2线程调度处于就绪状态的线程自动获得一个反映线程重要或紧急程度的优先级,并按照优先级排队等待CPU资源Java中,JVM负责线程的调度,在优先级的根底上依据“先到先效劳”的原那么为各线程分配CPU使用权如果有更高优先级的线程进入就绪状态,该线程将抢占低优先级线程所使用的CPU9.4.2线程调度获得CPU使用权的线程在出现以下情况之一时让出CPU:JVM强制线程放弃CPU,如CPU时间到、有更高优先级线程进入就绪状态因某种原因导致线程不能再继续运行下去,如等待输入输出、休眠、等待消息等run()方法执行结束,或被强行退出9.4.2线程调度JVM进行线程调度,主要依据优先级Java线程的优先级从1到10,其中10的优先级最高Thread类定义了三个静态int型常量MAX_PRIORITY、MIN_PRIORITY和NORM_PRIORITY分别表示优先级10、1和5,默认是59.4.2线程调度Thread类的setPriority()和getPriority()方法分别用来设置和获取线程的优先级:publicfinalvoidsetPriority(intnewPriority)publicfinalintgetPriority()9.4.3线程控制线程休眠:publicstaticvoidsleep(longmillis)throwsInterruptedException让出CPU时间:publicstaticvoidyield()9.4.3线程控制等待其他线程结束publicfinalvoidjoin()throwsInterruptedExceptionpublicfinalvoidjoin(longmillis)throwsInterruptedException9.4.3线程控制守护线程:publicfinalvoidsetDaemon(booleanon)publicfinalbooleanisDaemon()9.5线程的同步机制9.5.1共享资源9.5.2线程同步9.5.3线程通信9.5.1共享资源【例9-4】多线程访问共享资源SharedData.java,SharedDataTest.java如果不希望程序运行中的情况发生,需要引入线程同步机制,即各线程依照一定的规那么访问共享资源9.5.2线程同步实现线程同步使用synchronized关键字synchronized有两种用法:同步方法和同步代码块声明了synchronized的方法或代码块任何时候都只能有一个线程在运行9.5.2线程同步同步方法:synchronized方法声明{ //方法体}【例9-5】线程同步实现数据共享SharedDataSync.java,SharedDataSyncTest.java9.5.2线程同步同步代码块:synchronized(obj){ //同步代码}obj是某个对象,进入同步代码块的线程必须先获得obj的锁9.5.2线程同步注意实现线程同步时,必须使用同一个对象锁如果obj是this,那么与同步方法效果相同,因为this就是当前对象本身使用同步代码块时,不能用方法内的局部变量来做对象锁9.5.2线程同步同步方法和同步代码块的区别:前者同步的代码范围大于后者同步的代码范围,更容易引起死锁,还会降低系统的运行效率通常来说,同步的代码范围越小越好,因此尽管同步方法简单,但更好的方法是使用同步代码块9.5.3线程通信Object类定义的wait()、notify()和notifyAll()方法为同步操作的不同线程提供了一种通信手段所有类都继承了这些方法9.5.3线程通信wait()方法令当前线程转为阻塞状态,释放对象锁,并在其他线程调用notify()方法或notifyAll()方法后,由阻塞状态转为就绪状态publicfinalvoidwait()throwsInterruptedExceptionpublicfinalvoidwait(longtimeout)throwsInterruptedException9.5.3线程通信notify()方法用于唤醒当前对象的一个等待线程,使它由阻塞状态转为就绪状态publicfinalvoidnotify()notifyAll()方法用于唤醒当前对象的所有满足被唤醒条件的等待线程publicfinalvoidnotifyAl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现代文阅读教学策略研究进展汇报-探索教育新纪元
- 生产现场的人性化管理与实践
- 现代办公环境下的金融服务优化
- 2023三年级数学下册 六 认识分数第4课时 分一分(二)(2)说课稿 北师大版
- 2024年九年级语文下册 第三单元 第11课 送东阳马生序说课稿 新人教版001
- 2023四年级数学上册 一 认识更大的数第4课时 国土面积说课稿 北师大版001
- Unit 2 Lesson 4 Againplease(说课稿)-2024-2025学年鲁科版(五四学制)(三起)英语五年级上册001
- 《2 丛林之美-电子相册制作》说课稿-2023-2024学年清华版(2012)信息技术六年级上册
- 1 《开开心心上学去》(说课稿)2024-2025学年统编版(五四制)(2024)道德与法治一年级上册
- Unit1 Cultural Heritage Video Time 说课稿-2024-2025学年高中英语人教版(2019)必修第二册
- 医院重点监控药品管理制度
- 2024尼尔森IQ中国本土快消企业调研报告
- 2024年印度辣椒行业状况及未来发展趋势报告
- 骨科医院感染控制操作流程
- 食材配送技术方案
- 中药的临床合理应用
- 铸铝焊接工艺
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
- 《社区康复》课件-第六章 骨关节疾病、损伤患者的社区康复实践
- 南通市2024届高三第二次调研测试(二模)地理试卷(含官方答案)
- 高标准农田建设项目监理计划
评论
0/150
提交评论