park 和 unpark
park和unpark是LockSupport里面的方法,park的中文翻译有停在这的意思,所以park方法的作用就是停下一个线程,而unpark就是唤醒线程。
特点
与Object的wait¬ify相比
- wait和notify相比必须配合Object Monitor一起使用,而park,unpark则不用
- park&unpark是以线程为单位来阻塞和唤醒线程的,而notify只能随机唤醒一个,notifyAll只能唤醒所有,不怎么精确
- park&unpark是可以先unpark的类似于先打个预防针,而wait¬ify则不能
原理
每个线程都有自己的一个Parker对象(是由底层c++代码实现的),由三部分组成_counter , _coud , _mutex 。
其中我们重点关心的是_counter,其中只有两种值0,1。
看个例子:
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
log.debug("开始");
LockSupport.park();
log.debug(

本文简要探讨了Java LockSupport中的park和unpark方法。与wait和notify不同,park和unpark不需要与对象监视器配合,而是以线程为单位进行阻塞和唤醒。文中提到,park会让线程进入阻塞状态,而unpark可以唤醒线程,但连续两次unpark并不会阻止线程被第二次park阻塞。作者通过实例指出,在两次unpark之间插入延迟可以使第二次unpark生效,对于这一现象的深入理解还需进一步学习。
最低0.47元/天 解锁文章
854





