java中停放的线程和等待的线程有什么区别?我有一个jboss核心转储并分析它显示了很多停放的线程。
java中停放的线程和等待的线程有什么区别?我有一个jboss核心转储并分析它显示了很多停放的线程。
看着 的Javadoc 该 park()
方法:
禁用当前线程以进行线程调度,除非 许可证可用。如果许可证可用则消耗 并且呼叫立即返回;否则当前线程变为 禁用用于线程调度目的并且处于休眠状态直到其中一个 发生了三件事:
其他一些线程调用unpark与当前线程作为 目标;或其他一些线程中断当前线程;或者 虚假地(即无缘无故地)回电。这种方法没有 报告哪些导致该方法返回。来电者应该 重新检查导致线程停在第一个的条件 地点。呼叫者还可以确定例如中断状态 返回时的线程。
所以停放的线程是一个被阻塞的线程 LockSupport.park()
。
看着 的Javadoc 该 park()
方法:
禁用当前线程以进行线程调度,除非 许可证可用。如果许可证可用则消耗 并且呼叫立即返回;否则当前线程变为 禁用用于线程调度目的并且处于休眠状态直到其中一个 发生了三件事:
其他一些线程调用unpark与当前线程作为 目标;或其他一些线程中断当前线程;或者 虚假地(即无缘无故地)回电。这种方法没有 报告哪些导致该方法返回。来电者应该 重新检查导致线程停在第一个的条件 地点。呼叫者还可以确定例如中断状态 返回时的线程。
所以停放的线程是一个被阻塞的线程 LockSupport.park()
。
LockSupport - 类采用工具基本线程阻塞原语来创建锁和其他同步类。
方法park()禁用当前线程以进行线程调度,除非许可证可用。
unpark(线程线程)使得给定线程的许可证可用(如果它尚不可用)。
使用它像:
终于{
LockSupport.unpark(螺纹);
}