Java线程生命周期

Java中常用的几种阻塞方法
通过上图中的线程生命周期图可知,常用的几种阻塞方法主要有: Thread.sleep(), LockSupport.park(), Object.wait
阻塞方法对比
在这里插入图片描述
Object.wait()相关
| 方法 | 描述 |
|---|---|
| Object.wait() | 阻塞当前线程,同时释放锁,并等待另一个线程调用Object.notify()或者Object.notifyAll() |
| Object.wait(timeout) | 阻塞当前线程,同时释放锁,并等待时间到或者另一个线程调用Object.notify()或者Object.notifyAll() |
| Object.notify() | 从所有等待Object monitor的线程中选取一个线程唤醒并去抢占Object的monitor,如果抢占成功,则会有cpu调度的机会 |
| Object.notifyAll() | 唤醒所有等待Object monitor的线程同时所有唤醒线程重新去获取object的monitor,如果抢占成功,则会有cpu调度的机会 |
Thread.sleep()相关
Thread.sleep(timeout): 阻塞当前线程,同时不释放资源锁
LockSupport.park()相关
| 方法 | 描述 |
|---|---|
| LockSupport.park() | 阻塞线程,同时消耗1个许可,当另一个线程调用对当前线程的unpark()方法,才会唤醒 |
| LockSupport.parkUntil(timeout) | 阻塞线程,当timeout时间到或者另一个线程调用对当前线程的unpark()方法,才会唤醒等待或者cpu并继续执行后续代码 |
| LockSupport.parkNanos(timeout) | 阻塞线程,当timeout时间到或另一个线程调用当前线程的unpark()方法,才会唤醒等待或者cpu并继续执行后续代码 |
| LockSupport.unpark(Thread) | 调用某个线程的unpark方法,则指定线程会唤醒park()线程 |
版权声明:本文为qinwuxian19891211原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。