等待唤醒机制

线程状态

new 至今尚未启动的线程处于这种状态。
runnable正在Java虚拟机中执行的线程处于这种状态。
blocked受阻塞并等待某个监视器锁的线程处于这种状态。
waiting无限期的等待另一个线程来执行某一特定操作的线程处于这种状态。
timed_waiting等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态。
terminated已退出的线程处于这种状态。

阻塞状态:具有CPU的执行资格,等待CPU空闲时执行。
休眠状态:放弃CPU的执行资格,CPU空闲也不执行。

进入到TimeWaiting(计时等待)有两种方式
(1)使用sleep(long m)方法,在毫秒值结束之后,线程睡醒进入到Runnable/Block状态
(2)使用wait(long m)方法,wait方法如果在毫秒值结束之后,还没被notify唤醒,就会自动醒来,线程睡醒进入到Runnable/Block状态。
唤醒的方法:
void notify()唤醒在此对象监视器上等待的单个线程。
void notifyAll()唤醒在此对西那个监视器上等待的所有线程。

线程间通信

多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。

等待唤醒机制

重点:有效的利用资源
如果能获取锁,线程就从waiting状态变为runnable状态;否则从wait set出来,进入到entry set,线程就从waiting状态又变成blocked状态。
使用到的三个方法:wait, notify, notifyAll
等待唤醒机制其实就是生产者与消费者问题

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不同,比如著名的生产者消费者模型 注...
    哈哈大圣阅读 3,199评论 0 0
  • 前言 今天看源码的时候遇到这样一个场景,某线程里面的逻辑需要等待异步处理结果返回后才能继续执行。或者说想要把一个异...
    peter_RD_nj阅读 7,629评论 0 0
  • 线程间通讯:其实就是多个线程在操作同一个资源,但是操作的动作不同。 wait();notify();notifyA...
    一亩三分甜阅读 2,444评论 1 2
  • 我的胃里翻江倒海的难受,并不是因为我要拿出钱。 而是母亲的态度,她从来不问我的处境,尽管她知道,可她对弟弟从来不会...
    漫漫也好阅读 1,222评论 0 0
  • 桂,是一个挺好的女孩,在一个国企上班,收入都算可以。桂是农村的女孩子,有一个正在读高中的弟弟的,桂每个月从自己的工...
    柏木水阅读 1,300评论 0 2