从这个图中可以看出,等待状态是一种特殊的状态。使线程陷入等待实际上是暂时剥夺线程当前拥有的CPU时间片和获取CPU时间片的资格,使其返回到就绪状态。除非被唤醒,否则等待时间已满,该线程将一直等待。不会被JVM线程调度器选中并赋予CPU时间片。处于等待的线程一旦恢复执行,与其他处于就绪状态被线程调度器选中的线程不同,将从上次结束执行的断点处开始执行,而非从头开始。
使线程中断运行,返回就绪状态的手段是调用java.lang.Object对象的wait()方法;唤醒处于等待状态的线程的手段是调用java.lang.Object对象的notify()方法
为了加深理解,下面就通过具体例子来说明线程等待和唤醒
第一个:
通过继承Thread来创建子线程。
运行效果如下:
第二个:
通过实现Runnable接口来创建子线程
<!--EndFragment-->
运行效果如下:
第三个:
通过实现Runnable,又通过Object对象的notifyAll()方法一次性唤醒多个同一个对象创造的线程。
运行效果如下:
<!--EndFragment-->
总结:1).利用Thread.sleep().使线程开始休眠指定的时间,以便让各个子线程进入等待状态。
2).synchronized同步锁的使用。这一块在后面文章中会加以解说。
<!--EndFragment--><!--EndFragment-->
分享到:
相关推荐
27_多线程_第2天(线程安全、线程同步、等待唤醒机制、单例设计模式)_讲义
多线程的知识点讲解,,,线程安全,线程同步,,等待唤醒机制,单例设计模式,,,,,,,,,让你更好理解多线程
第一个线程:遍历1–1000所有的数字,在遍历过程中,如果发现这个数字能同时被2,3,5,7整除,立即wait()等待,让第二个线程进入。 第二个线程:运行后,将一个计数器 + 1,之后再唤醒等待的线程。 主线程中:休息2秒...
3. 将unlock挪至第二个sleep后,发现交替现象很难出现。 线程在操作完共享资源后本应该立即解锁,但修改后,线程抱着锁睡眠。睡醒解锁后又立即加锁,这两个库函数本身不会阻塞。 所以在这两行代码之间失去cpu的概率...
2.用线程实现睡觉的理发师问题,(同步互斥方式采用信号量或mutex方式均可) 理发师问题的描述:一个理发店接待室有n张椅子,工作室有1张椅子;没有顾客时,理发师睡觉;第一个顾客来到时,必须将理发师唤醒;顾客...
基于c++及linux网络编程的web服务器源码.zip ...第二处是定时器结点的添加和删除,需要加锁,主线程和工作线程都要操作定时器队列。 几乎所有的指针采用智能指针 对于时间结点和HTTP类互指问题,采用weak_ptr解决
//请等待,先不要写入数据,等待另一线程取走数据 }catch(Exception e){} } this.name=name; try{ Thread.sleep(10); }catch(Exception e){System.out.println(e.getMessage());}...
假设涉及多个线程等待信号量的问题,那么当满足条件时,拥有最高优先级的线程应 被优先唤醒进入ready-list。修改sema_down()函数,参加插入排序的功能。 7.同6一样修改sema_up〔〕函数,对等待队列进展排序。 cond_...
2、掌握线程的启动、同步、等待和唤醒 2、模拟一个银行存款的程序 3、运行
要求模拟系统存在两块硬盘:每个磁盘分成128块,每块64字节,第0,1块存放FAT表,第2块存放初始盘快。 文件的逻辑结构采用流式结构; 文件的内容: 文件的内容均采用文本文件,系统中有两种文件: 一种是存放...
第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...
第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...
第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...
第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...
6.3 线程的等待/唤醒机制 470 6.4 信号量(Semaphore) 499 6.5 互斥门(Mutant) 505 6.6 事件(Event) 512 6.7 命名管道(Named Pipe)和信插(Mailslot) 516 6.8 本地过程调用(LPC) 521 6.9 视窗报文...
update() 在线程同步中,为了唤醒另一个等待的线程,使用下列方法 () [单选题] * A.sleep() B.wait() C.notify()(正确答案) D. join() Java高级程序设计测试含答案全文共40页,当前为第4页。Java提供以下哪个...
为模拟调度算法,给每个线程设置一个等待锁,暂不运行的任务等待在相应的锁变量上。主线程按调度算法唤醒一个子线程,被选中线程执行一个时间单位,然后将控制权交给主线程判断是否需要重新调度。
##大纲这是一个围绕标准 HashMap 的简单包装器,用于支持可配置的到期时间。 可以使用关联的超时写入密钥。 驱逐是使用后台线程自动安排的。... 到期服务为了简单而牺牲了一些性能,特别是在进入等待之前,第二次