问题 Java停放线程


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


3511
2018-04-04 10:30


起源



答案:


看着 的Javadoc 该 park() 方法:

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

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

所以停放的线程是一个被阻塞的线程 LockSupport.park()


12
2018-04-04 10:34



虽然这是一个公认的答案,但这个答案几乎没有直觉对其有用性 park 与其他选择 - matanster


答案:


看着 的Javadoc 该 park() 方法:

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

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

所以停放的线程是一个被阻塞的线程 LockSupport.park()


12
2018-04-04 10:34



虽然这是一个公认的答案,但这个答案几乎没有直觉对其有用性 park 与其他选择 - matanster


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

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

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

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


-1
2018-04-01 12:20