Java 停放线程

2022-09-01 17:33:00

在java中,停放线程和等待线程有什么区别?我有一个jboss核心转储,分析它显示了很多停放的线程。


答案 1

看看Javadoc的方法:park()

禁用当前线程以进行线程调度,除非许可证可用。如果许可证可用,则使用它,并且呼叫立即返回;否则,当前线程将因线程调度而被禁用并处于休眠状态,直到发生以下三种情况之一:

其他一些线程调用unpark,当前线程作为目标;或其他一些线程中断当前线程;或虚假调用(即无缘无故)返回。此方法不报告是哪一个导致方法返回的。调用方应首先重新检查导致线程停放的条件。例如,调用方还可以确定返回时线程的中断状态。

因此,停放的线程是使用 阻止的线程。LockSupport.park()


答案 2

park() 和 wait() 都将导致线程被禁用。使禁用的线程再次处于活动状态取决于其禁用方式。

通过调用 LockSupport.park() 被禁用的线程将保持禁用状态,直到:

  • 其他一些线程调用 unpark(),或者
  • 其他一些线程调用 interrupt(),或
  • “虚假(即无缘无故)调用返回”

通过调用 Object 的 wait() 禁用的线程(这相当于调用 wait(0))将保持禁用状态,直到: