java线程中的sleep/wait/notify/yield/interrupt方法 整理
java线程中的sleep/wait/notify/yield/interrupt方法
sleep
- 该方法能够使当前线程休眠一段时间
- 休眠期间,不释放锁
- 休眠时间结束之后,进入可执行状态,加入到线程就绪队列中,并不会立即执行
- 调用的时候,必须捕获异常
- 来自Thread的静态方法,只作用于当前线程
- 单位毫秒
wait
- 该方法能干是当前线程休眠一段时间
- 休眠期间,释放锁
- 休眠时间结束之后,立即执行
- 调用的时候无需捕获异常
- 来自Object类的方法,一旦调用
- 单位毫秒
- 调用wait()方法进入休眠之后,通过notify()/notifyAll()方法唤醒
join
有点特别
假如线程a中调用线程b的join()(这个时候b已经开始执行了),结果是线程a必须等b执行完,a才能继续执行
个人感觉有点抽象,不符合某些设计原则,会把程序的代码结构搞得很乱。这样的方法用的很少
yield
与sleep类似,不能由用户指定休眠时间。只能让同优先级的线程有执行的机会。
interrupt
interrupt()中断线程。需要注意的是,InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线程调用interrupt()时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到wait()/sleep()/join()后,就会立刻抛出InterruptedException。