十四. 线程睡眠/阻塞/等待的总结

一. LockSupport说明

LockSupportjava.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()调用该方法的线程会进入等待状态,等待状态中的线程可以响应中断并抛出中断异常,调用该方法时需要线程已经持有锁资源,调用该方法后会释放锁资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱花祭的约定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值