文章目录
LockSupport
LockSupport
定义了一组公共的静态方法,提供了最基本的线程阻塞和唤醒功能,LockSupport
也是构建同步组件(AQS
)的基础工具。
以park
开头的方法用来阻塞当前线程,以及unpark(Thread thread)
方法来唤醒一个被阻塞的线程。
方法
方法 | 描述 |
---|---|
void unpark(Thread thread) | 唤醒处于阻塞状态的线程 |
void park() | 阻塞当前线程,调用 unpark 方法或者当前线程被中断,才能从 park 方法返回 |
void parkNanos(long nanos) | 阻塞当前线程,最长不超过 nanos 纳秒,返回条件在 park 的基础上增加了超时返回 |
void parkUntil(long deadline) | 阻塞当前线程,直到 deadline 时间(从1970年开始到 deadline 时间的毫秒数) |
JDK 6
中增加了park(Object blocker)
、parkNanos(Object blocker, long nanos)
和parkUntil(Object blocker, long deadline)
3个方法,也是用于阻塞当前线程,其中参数blocker
用于表示当前线程在等待的对象,主要用于问题排查和系统监控。
通过setBlocker(Thread t, Object arg)
方法将blocker
变量存放到当前线程的parkBlocker
成员变量中。
示例
public class LockSupportTest {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
System.out.println("Child thread begin park");
LockSupport.park();
System.out.println("child thread unpark");
});
thread.start();
Thread.sleep(1000);
LockSupport.unpark(thread);
// thread.interrupt();
}
}