1.概述
前半部分完全转载:https://segmentfault.com/a/1190000014436679
1. LockSupport类介绍
LockSupport类可以
阻塞当前线程
以及
唤醒指定被阻塞
的线程。主要是通过
park()
和
unpark(thread)
方法来实现阻塞和唤醒线程的操作的。
每个线程都有一个许可(permit),permit只有两个值1和0,默认是0。
- 当调用
方法,就会将thread线程的许可permit设置成1(注意多次调用unpark方法,不会累加,permit值还是1)。unpark(thread)
- 当调用
方法,如果当前线程的park()
,那么将permit设置为0,并立即返回。如果当前线程的permit是0,那么当前线程就会阻塞,直到别的线程将当前线程的permit设置为1.park方法会将permit再次设置为0,并返回。permit是1
注意:
因为permit默认是0,所以一开始调用park()方法,线程必定会被阻塞
。