Java多线程系列 基础篇07 wait/notify/sleep/yield/join

Posted lizhouwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程系列 基础篇07 wait/notify/sleep/yield/join相关的知识,希望对你有一定的参考价值。

1.Object类中的wait()/notify()/notifyAll()

wait(): 让当前线程处于Waiting状态并释放掉持有的对象锁,直到其他线程调用此对象的线程notify()/notifyAll()方法,当前线程被唤醒进入Runnable状态 。
wait(long timeout):让当前线程处于Timed Waiting状态并释放掉持有的对象锁,直到其他线程调用此对象的线程notify()/notifyAll()方法或者时间到期,当前线程被唤醒进入Runnable状态 。
wait(long timeout, int nanos) :让当前线程处于“Timed Waiting状态”,“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者时间到期,当前线程被唤醒进入Runnable状态 。
notify():随机唤醒在此对象监视器上等待的单个线程(不会立即释放所持有的对象锁,等到synchronized方法或者语法块执行完才真正释放锁)。
notifyAll():随机唤醒在此对象监视器上等待的全部线程(不会立即释放所持有的对象锁,等到synchronized方法或者语法块执行完才真正释放锁)。

2.Thread类中的sleep()/yield()/join()

sleep(): 让当前线程暂停指定的时间(毫秒),sleep方法只是暂时让出CPU的执行权,在synchronized修饰的同步方法或者代码块中,并不释放锁。
yield(): 让当前线程暂停,以便其他线程有机会执行,不过不能指定暂停的时间,并且也不能保证当前线程马上停止,暂时让出CPU的执行权。
join(): 让当前父线程等待子线程执行完成后再执行,不过有一点需要注意,这里的join只调用了wait方法,却没有对应的notify方法,原因是Thread的start方法中做了相应的处理,所以当join的线程执行完成以后,会自动唤醒主线程继续往下执行。







以上是关于Java多线程系列 基础篇07 wait/notify/sleep/yield/join的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程系列--“基础篇”01之 基本概念

Java多线程系列--“基础篇”06之 线程让步

Java多线程系列目录(转)

Java多线程系列--“基础篇”08之 join()

Java多线程系列--“基础篇”09之 interrupt()和线程终止方式

Java多线程系列--“基础篇”10之 线程优先级和守护线程