Java停放线程

Rne*_*net 11 java multithreading

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

das*_*h1e 13

看看Javadocpark()方法:

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

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

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

  • 虽然是公认的答案,但与其他选项相比,这个答案几乎没有提供直觉到“停车”的实用性 (2认同)

kaa*_*aan 9

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

\n\n

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

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

通过调用 Object 的wait() \xe2\x80\x93\xc2\xa0(相当于调用wait(0)\xe2\x80\x93)禁用的线程将保持禁用状态,直到:

\n\n\n


her*_*eus 5

在Java中,通过调用方法而停放的LockSupport.park()线程是等待线程(在Thread.state.WAITING)。

请参阅Thread.state.WAITING的 Java 文档。

有3种方法可以使线程处于WAITING状态:

  1. Object.wait 没有超时
  2. Thread.join 没有超时
  3. 锁支持.park

处于等待状态的线程正在等待另一个线程执行特定操作。

例如,对某个对象调用了 Object.wait() 的线程正在等待另一个线程对该对象调用 Object.notify() 或 Object.notifyAll()。调用 Thread.join() 的线程正在等待指定线程终止。