码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-05-22 22:04:03      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:中断   多线程   子线程   ble   代码块   object类   yield   waiting   一点   

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

标签:中断   多线程   子线程   ble   代码块   object类   yield   waiting   一点   

原文地址:https://www.cnblogs.com/lizhouwei/p/9073911.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!