Java停放线程

时间:2012-04-04 10:30:35

标签: java multithreading

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

5 个答案:

答案 0 :(得分:12)

查看Javadoc park()方法:

  

禁用当前线程以进行线程调度,除非   许可证可用。如果许可证可用则消耗   并且呼叫立即返回;否则当前线程变为   禁用用于线程调度的目的,并且一直处于休眠状态   发生了三件事:

     

其他一些线程使用当前线程调用unpark   目标;或其他一些线程中断当前线程;或者   虚假地(即无缘无故地)回叫。这种方法没有   报告哪些导致该方法返回。来电者应该   重新检查导致线程停在第一个的条件   地点。呼叫者还可以确定例如中断状态   返回时的线程。

所以停放的线程是使用LockSupport.park()阻止的线程。

答案 1 :(得分:2)

park()和wait()都将导致禁用线程。重新启用禁用的线程取决于如何禁用它。

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

  • 其他一些线程调用unpark()
  • 其他一些线程调用interrupt()
  • “虚假呼叫(即无故)返回”

已被调用Object的wait()禁用的线程(等效于调用wait(0))将保持禁用状态,直到:

答案 2 :(得分:1)

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

请参阅Java文档 Thread.state.WAITING

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

  1. Object.wait没有超时
  2. Thread.join没有超时
  3. LockSupport.park

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

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

答案 3 :(得分:0)

停车表示暂停执行,直到获得许可为止。 许可是指继续执行的许可。 线程可以暂停其执行,直到获得许可为止。当许可证可用时,驻留线程将消耗它并退出 park()方法

答案 4 :(得分:-1)

LockSupport - 类使用工具基本线程阻塞原语来创建锁和其他同步类。

方法park()禁用当前线程以进行线程调度,除非许可证可用。

unpark(线程线程)使得给定线程的许可证可用(如果它尚不可用)。

使用它像:     终于{         LockSupport.unpark(螺纹);       }