当前位置: 代码迷 >> 综合 >> Java线程中 suspend() 和 resume() 、wait() 和 notify()、park和unpark
  详细解决方案

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

热度:92   发布时间:2024-01-10 04:38:43.0

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

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

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

  相关解决方案