大家好,我是半夏之沫 😁😁 一名金融科技领域的JAVA系统研发😊😊
我希望将自己工作和学习中的经验以最朴实,最严谨的方式分享给大家,共同进步👉💓👈
👉👉👉👉👉👉👉👉💓写作不易,期待大家的关注和点赞💓👈👈👈👈👈👈👈👈
👉👉👉👉👉👉👉👉💓关注微信公众号【技术探界】 💓👈👈👈👈👈👈👈👈
一. LockSupport说明
LockSupport是java.util.concurrent.locks包中的一个重要工具类,LockSupport提供了一组静态方法用于阻塞/唤醒线程,方法签名如下所示。
public static void park()
public static void park(Object blocker)
public static void parkNanos(long nanos)
public static void parkNanos(Object blocker, long nanos)
public static void parkUntil(long deadline)
public static void parkUntil(Object blocker, long deadline)
public static void unpark(Thread thread)
将LockSupport的方法进行整理如下。
| 方法 | 说明 |
|---|---|
park() | 将调用park()方法的线程阻塞,响应中断。 |
parkNanos() | 将调用parkNanos()方法的线程阻塞,并指定阻塞时间,响应中断。 |
parkUntil() | 将调用parkUntil()方法的线程阻塞,并指定截止时间点,响应中断。 |
unpark(Thread thread) | 唤醒传入的线程。 |
二. 线程睡眠/阻塞/等待的对比
已知让线程睡眠(阻塞或等待)的方式有四种,分别是Thread.sleep(time),LockSupport.park(),Object.wait()和Condition.await(),现在对上述四种方式进行一个简单对比,如下表所示。
| 方式 | 说明 |
|---|---|
Thread.sleep(time) | 调用该方法必须指定线程睡眠的时间,睡眠中的线程可以响应中断并抛出中断异常,调用该方法时不需要线程持有锁资源,但是持有锁资源的线程调用该方法睡眠后不会释放锁资源。 |
LockSupport.park() | 调用该方法的线程会被阻塞,被阻塞中的线程可以响应中断但不会抛出中断异常,调用该方法时不需要线程持有锁资源,但是持有锁资源的线程调用该方法睡眠后不会释放锁资源 |
Object.wait() | 调用该方法的线程会进入等待状态,等待状态中的线程可以响应中断并抛出中断异常,调用该方法时需要线程已经持有锁资源,调用该方法后会释放锁资源。 |
Condition.await() | 调用该方法的线程会进入等待状态,等待状态中的线程可以响应中断并抛出中断异常,调用该方法时需要线程已经持有锁资源,调用该方法后会释放锁资源。 |
大家好,我是半夏之沫 😁😁 一名金融科技领域的JAVA系统研发😊😊
我希望将自己工作和学习中的经验以最朴实,最严谨的方式分享给大家,共同进步👉💓👈
👉👉👉👉👉👉👉👉💓写作不易,期待大家的关注和点赞💓👈👈👈👈👈👈👈👈
👉👉👉👉👉👉👉👉💓关注微信公众号【技术探界】 💓👈👈👈👈👈👈👈👈
LockSupport是Java并发工具类,提供park和unpark等方法来阻塞和唤醒线程。park系列方法可指定阻塞时间和截止时间,并响应中断。与Thread.sleep、Object.wait和Condition.await对比,它们在中断处理和锁资源释放上有所不同。Thread.sleep不释放锁,LockSupport.park也不会,而wait和await在等待时会释放锁。
1526

被折叠的 条评论
为什么被折叠?



