多线程常见的几种方法
- 是否了解多线程开发里常用的方法,sleep/yield/join wait/notify/notifyAll,分别解释一下
sleep
属于线程Thread的方法
让现场暂缓执行,等待预计时间之后再恢复
交出CPU使用权,不会释放锁
进入阻塞状态TIME_WAITING,睡眠结束变为就绪Runnable
yield
属于线程Thread的方法
t1/t2/t3
暂停当前对象线程的对象,去执行其他线程
交出CUP使用权,不会释放锁,和sleep相似
作用:让相同优先级的线程执行,但是不能保证一定轮流
注意:不会让线程进入阻塞状态,直接变为就绪Runnable,只需要重新获取CPU使用权
join
属于线程Thread方法
在主线程上运行调用该方法,会让主线程休眠,不会释放已经持有的对象锁
让调用join方法的线程先执行完毕,在执行其他线程
类似像救护车和警察优先通过
wait
属于Object的方法
当前线程调用对象的wait方法,会释放锁,进入线程的等待队列
需要依靠notify或者notifyAll唤醒,或者wait(timeout)时间自动唤醒
notify
属于Object的方法
唤醒在对象监视器上等待的单个线程,选择是任意的
notifyAll
属于Object的方法
唤醒在对象监视器上等待的全部线程