Thread.sleep(),Object.wait(),Loc

2022-05-13  本文已影响0人  不知不怪

1. Thread.sleep()

1.1 不会释放占有的锁
1.2 只有超时版本
1.3 只能到时间自己醒来
1.4 醒来看一定继续执行后续代码
1.5 方法声明有中断异常
1.6 本身是一个native方法

2. Object.wait()

2.1 会释放资源
2.2 有超时版本也有非超时版本
2.3 不带时间的只能另一个线程notify
2.4 带时间的可以另一个线程notify也可以超时唤醒
2.5 被唤醒不一定立即执行后续代码
2.6 方法声明有中断异常
2.7 需要在synchronized中执行
2.8 notify不能在其之前执行
2.9 wait(timeout)是一个native方法

3. LockSupport.park()

3.1 不会释放占有的锁资源
3.2 有超时版本也有非超时版本
3.3 可以在任意地方使用
3.4 方法声明不带中断异常
3.5 底层调用Unsafe的native方法park()
3.6 不带超时的只能被另一个线程调用unpark()唤醒
3.7 带超时的可以被另一个线程unpark()唤醒也可以等待超时唤醒
3.8 唤醒后一定继续执行后续代码 unpark()可以在park()之执行
3.9 实现是原理是二元信号量

4. Condition.await()

4.1 有超时版本也有非超时版本
4.2 会释放锁资源
4.3 不带时间的只能另一个线程signal()
4.4 带时间的可以被另一线程signal()也可以等待超时唤醒
4.5被唤醒后不一定立即执行后续代码
4.6方法声明有中断异常
4.7 需要在lokc()块中执行
4.8 signal()不能在其之前执行
4.9底层调用LockSupport.park()实现阻塞
上一篇下一篇

猜你喜欢

热点阅读