`
shinfocom
  • 浏览: 1191752 次
文章分类
社区版块
存档分类
最新评论

第二部分 线程的等待和唤醒

 
阅读更多

从这个图中可以看出,等待状态是一种特殊的状态。使线程陷入等待实际上是暂时剥夺线程当前拥有的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天(线程安全、线程同步、等待唤醒机制、单例设计模式)_讲义

    27_多线程_第2天(线程安全、线程同步、等待唤醒机制、单例设计模式)_讲义

    27_多线程_第2天(线程安全、线程同步、等待唤醒机制、单例设计模式)_讲义.doc

    多线程的知识点讲解,,,线程安全,线程同步,,等待唤醒机制,单例设计模式,,,,,,,,,让你更好理解多线程

    多线程:“等待唤醒”编程题

    第一个线程:遍历1–1000所有的数字,在遍历过程中,如果发现这个数字能同时被2,3,5,7整除,立即wait()等待,让第二个线程进入。 第二个线程:运行后,将一个计数器 + 1,之后再唤醒等待的线程。 主线程中:休息2秒...

    Linux系统编程之线程同步

    3. 将unlock挪至第二个sleep后,发现交替现象很难出现。 线程在操作完共享资源后本应该立即解锁,但修改后,线程抱着锁睡眠。睡醒解锁后又立即加锁,这两个库函数本身不会阻塞。 所以在这两行代码之间失去cpu的概率...

    操作系统OS第3次实验报告.doc,进程和线程同步和互斥

    2.用线程实现睡觉的理发师问题,(同步互斥方式采用信号量或mutex方式均可) 理发师问题的描述:一个理发店接待室有n张椅子,工作室有1张椅子;没有顾客时,理发师睡觉;第一个顾客来到时,必须将理发师唤醒;顾客...

    基于c++及linux网络编程的web服务器源码.zip

    基于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());}...

    西电计算机操作系统课程设计pintos-pro2.doc

    假设涉及多个线程等待信号量的问题,那么当满足条件时,拥有最高优先级的线程应 被优先唤醒进入ready-list。修改sema_down()函数,参加插入排序的功能。 7.同6一样修改sema_up〔〕函数,对等待队列进展排序。 cond_...

    面向对象程序设计实验-18计科3班-20181101047-范少帅-第八次1

    2、掌握线程的启动、同步、等待和唤醒 2、模拟一个银行存款的程序 3、运行

    OS 操作系统 进程 线程 文件 设备 C# 多用户 登陆 课程设计 报告 算法 FCFS

    要求模拟系统存在两块硬盘:每个磁盘分成128块,每块64字节,第0,1块存放FAT表,第2块存放初始盘快。 文件的逻辑结构采用流式结构; 文件的内容: 文件的内容均采用文本文件,系统中有两种文件: 一种是存放...

    java并发编程

    第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...

    龙果 java并发编程原理实战

    第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...

    Java 并发编程原理与实战视频

    第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...

    龙果java并发编程完整视频

    第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...

    Windows 内核情景分析--采用开源代码ReactOS (上册) part01

    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 视窗报文...

    Java高级程序设计测试含答案.docx

    update() 在线程同步中,为了唤醒另一个等待的线程,使用下列方法 () [单选题] * A.sleep() B.wait() C.notify()(正确答案) D. join() Java高级程序设计测试含答案全文共40页,当前为第4页。Java提供以下哪个...

    吉林大学2022年操作系统实验报告(仅供参考)

    为模拟调度算法,给每个线程设置一个等待锁,暂不运行的任务等待在相应的锁变量上。主线程按调度算法唤醒一个子线程,被选中线程执行一个时间单位,然后将控制权交给主线程判断是否需要重新调度。

    expiring-map:过期地图的小玩具实现

    ##大纲这是一个围绕标准 HashMap 的简单包装器,用于支持可配置的到期时间。 可以使用关联的超时写入密钥。 驱逐是使用后台线程自动安排的。... 到期服务为了简单而牺牲了一些性能,特别是在进入等待之前,第二次

Global site tag (gtag.js) - Google Analytics