park 和 unpark 实现原理

LockSupport.park() 和 LockSupport.unpark() 不用在 synchronized 代码块中调用;如果 unpark 可以在 park 之前执行,则 park 不会等待,而是继续向下执行;还有就是 unpark 唤醒线程更加精确。

每个线程都有自己的一个 Parker 对象,由三部分组成 _counter、 _cond 和 _mutex.

当线程调用 park() 方法时,先检查 _counter,如果为 0,则获得 _mutex 然后进入 _cond 阻塞,最后在设置 _counter = 0;

当别的线程调用 unpark 方法唤醒指定线程时,先将 _counter = 1,然后将 _cond 中阻塞的线程唤醒,最后设置 _counter = 0;

park 和 unpark 实现原理

上一篇:Archlinux配置~小米笔记本Air 13.3英寸版本


下一篇:windows server 2012 r2 App-V 5.1 安装部署