sleep、wait、park的区别

3种方式让线程进入休眠状态,分别是Thread.sleep()、Object.wait()、LockSupport.park()方法

Thread.sleep

1、Thread.sleep(time)方法必须传入指定的时间线程将进入休眠状态
2、会抛出InterruptedException异常,这是受检查异常,调用者必须处理
3、通过sleep方法进入休眠的线程不会释放持有的锁

wait

1、wait可指定睡眠时间,也可以无限制的休眠,直到有人唤醒他。
2、必须获得对象上的锁后,才可以执行该对象的wait方法。否则程序会在运行时抛出IllegalMonitorStateException异常。
3、调用wait()方法后,线程进入休眠的同时,会释放持有的该对象的锁,这样其他线程就能在这期间获取到锁了
4、notify()或者notifyAll()方法可以唤醒因为wait()而进入等待的线程,但不能指定唤醒哪一个线程,只能随机的返回一个线程
5、wait 和notify有使用限制,必须在schronized的同步块里面

LockSupport.park

1、底层调用了Unsafe类的park方法:
2、调用park设置一个blocker对象,主要用来给监视工具和诊断工具确定线程受阻塞的原因。
3、park进入休眠后并不会释放持有的锁
4、park方法不会抛出InterruptedException,但是它也会响应中断。当外部线程对阻塞线程调用interrupt方法时,park阻塞的线程也会立刻返回。
5、park和unpark可以唤醒指定的线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

信仰_273993243

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

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

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

打赏作者

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

抵扣说明:

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

余额充值