- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
9.5 多线程的同步 怎样实现同步 具有wait()和notify()的线程状态图: * 第九章 线程 线程的内部通信 为避免轮流检测,Java提供了一个精心设计的线程间通信机制,使用wait()、notify()和notifyAll()方法 。 这些方法是作为 Object 类中的 final 方法实现的。 wait()方法告知被调用的线程退出监视器并进入等待状态,直到其他线程进入相同的监视器并调用 notify( ) 方法。 notify( ) 方法通知同一对象上第一个调用 wait( )线程。 notifyAll() 方法通知调用 wait() 的所有线程,具有最高优先级的线程将先运行。 9.6 线程组 1. 线程组: 所有线程都隶属于一个线程组。那可以是一个默认线程组,亦可是一个创建线程时明确指定的组。 说明: 在创建之初,线程被限制到一个组里,而且不能改变到一个不同的组。 若创建多个线程而不指定一个组,它们就会与创建它的线程属于同一个组。 * 第九章 线程 9.6 线程组 例子: public Thread(ThreadGroup group, Runnable target) public Thread(ThreadGroup group, String name) public Thread(ThreadGroup group, Runnable target, String name) ThreadGroup myThreadGroup = new ThreadGroup( My Group of Threads); Thread myThread = new Thread(myThreadGroup, a thread for my group); theGroup = myThread.getThreadGroup(); * 第九章 线程 2009.03.01 第九章 线程 9.1 线程概念 9.2 线程的生命周期 9.3 线程的实现 9.4 线程的优先级 9.5 多线程的同步 9.6 线程组 * 多任务处理 多任务处理有两种类型: 基于进程 进程是重量级的内核级实体,需要分配它们自己独立的地址空间:包括有虚拟内存映射、文件描述符、用户ID等,并且每个进程都有属于自己的这些集合。用户的程序要访问进程结构中的数据、查询或改变状态,唯一方法是通过系统调用。进程间通信和转换是昂贵和受限的。 基于线程 线程是轻量级实体,由寄存器、堆栈和某些数据组成。进程结构的其余部分由所有的线程所共享:如地址空间、文件描述符等——它们共享相同的地址空间并且共同分享同一个进程。线程间通信是便宜的,线程间的转换也是低成本的。 9.1 线程概念 什么是线程: 线程就是程序中单独顺序的流控制。线程本身不能运行,它只能用于程序中。 * 第九章 线程 9.1 线程概念 2. 什么是多线程: 多线程则指的是在单个程序中可以同时运行多个不同的线程执行不同的任务. * 第九章 线程 9.1 线程概念 说明: 线程是程序内的顺序控制流,只能使用分配给程序的资源和环境。 * 第九章 线程 9.2 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程。 线程的生命周期可分为四个状态: 创建状态 可运行状态 不可运行状态 4. 消亡状态 * 第九章 线程 9.2 线程的生命周期 线程的状态转换图: * 第九章 线程 9.2 线程的生命周期 创建状态 当用new操作符创建一个新的线程对象时,该线程处于创建状态。 处于创建状态的线程只是一个空的线程对象,系统不为它分配资源 此时只能调用start方法启动该线程,调用其它任何方法都会产生线程非法状态异常。 * 第九章 线程 9.2 线程的生命周期 2. 可运行状态 执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体—run()方法,这样就使得该线程处于可运行( Runnable )状态。 这一状态并不是运行中状态(Running ),因为线程也许实际上并未真正运行。 * 第九章 线程 9.2 线程的生命周期 3.不可运行状态 当发生下列事件时,处于运行状态的线程会转入到不可运行状态。 调用了sleep()方法; 线程调用wait方法所等待的特定条件的满足 线程输入/输出阻塞 * 第九章 线程 9.2 线程的生命周期 返回可运行状态: 处于睡眠状态的线程在指定的时间过去后 如果
原创力文档


文档评论(0)