等待唤醒机制

线程状态

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
等待唤醒机制其实就是生产者与消费者问题

你可能感兴趣的:(等待唤醒机制)