一、LockSupport工具类
提供一系列方法如下:
提供的静态方法 | 方法描述 |
public static void park() | 阻塞当前线程,除非调用unpark方法或者当前线程中断才能返回 |
public static void park(Object blocker) | |
public static void parkNanos(long nanos) | 阻塞当前线程,最长时间不超过nanos纳秒,返回条件在part()增加了超时时间 |
public static void parkNanos(Object blocker, long nanos) | |
public static void parkUntil(long deadline) | 阻塞当前线程,直到deadline(从1970年开始到deadline时间的毫秒数) |
public static void parkUntil(Object blocker, long deadline) | |
public static void unpark(Thread thread) | 唤醒处于阻塞状态的线程Thread |
如上在jdk1.5之前没有如上红色的方法,在之后才添加了这些方法,这些方法都是在之前的参数中提供了Object blocker对象,这个是为了在dump线程数据时,可以在dump结果中看到当前阻塞对象的信息(仅此而已)。
二、Condition接口
1. 这是一个接口,提供的方法如下:
还有新增的一个方法(可以给等待时间自定义单位):
boolean await(long time, TimeUnit unit) throws InterruptedException; //自定义时间单位
说明:signal是唤醒等待时间最长的一个线程,并让这个线程从等到队列加入到同步竞争队列中,
signalAll效果就是对每一个线程都执行了signal方法,让他们都从等到队列加入到同步竞争队列中
2. Condition提供了类似Object的监视器方法,和Lock配合可以实现等待和通知模式,
Condition是通过Lock类的newCondition方法建立的。Object的监视器方法和Condition接口的对比如下: