Java线程中 suspend() 和 resume() 、wait() 和 notify()、park和unpark

本文深入解析线程控制机制,涵盖suspend()与resume()、wait()与notify()、以及unpark()与park()方法的使用与区别。探讨这些方法如何影响线程状态,包括阻塞、唤醒及许可机制,同时指出易引发死锁的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

suspend() 和 resume() 方法:两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的 resume() 被调用,才能使得线程重新进入可执行状态。但suspend()方法阻塞时都不会释放占用的锁,很容易引起死锁问题, 已经不推荐使用了。

wait() 和 notify() 方法:两个方法配套使用,wait() 使得线程进入阻塞状态,它有两种形式,一种允许 指定以毫秒为单位 的一段时间作为参数,另一种没有参数,前者当对应的 notify() 被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应 的 notify() 被调用。用wait/notify/notifyAll来同步的,它们之间的调用必须是有序进行,必须要先wait调用成功才能notify,而且使用notify只能唤醒一个线程,一般使用notifyAll方法。

unpark() 和 park() 方法:unpark函数为线程提供“许可(permit)”,线程调用park函数则等待“许可”,但“许可”是一次性的。unpark函数能够先于park调用,无时序限制,但同样不会释放占用的锁。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值