停放的线程和java中的等待线程有什么区别?我有一个jboss核心转储,并分析它显示了很多停放的线程。
答案 0 :(得分:12)
查看Javadoc park()
方法:
禁用当前线程以进行线程调度,除非 许可证可用。如果许可证可用则消耗 并且呼叫立即返回;否则当前线程变为 禁用用于线程调度的目的,并且一直处于休眠状态 发生了三件事:
其他一些线程使用当前线程调用unpark 目标;或其他一些线程中断当前线程;或者 虚假地(即无缘无故地)回叫。这种方法没有 报告哪些导致该方法返回。来电者应该 重新检查导致线程停在第一个的条件 地点。呼叫者还可以确定例如中断状态 返回时的线程。
所以停放的线程是使用LockSupport.park()
阻止的线程。
答案 1 :(得分:2)
park()和wait()都将导致禁用线程。重新启用禁用的线程取决于如何禁用它。
通过调用LockSupport.park()
被禁用的线程将保持禁用状态,直到:
unpark()
或interrupt()
或已被调用Object的wait()禁用的线程(等效于调用wait(0)
)将保持禁用状态,直到:
notify()
或notifyAll()
,或者interrupt()
答案 2 :(得分:1)
在Java中,通过调用LockSupport.park()
方法的 parked 线程是一个等待线程(在Thread.state.WAITING
中)。
请参阅Java文档 Thread.state.WAITING。
有3种方法可以使线程处于等待状态:
处于等待状态的线程正在等待另一个线程执行特定操作。
例如,一个在对象上调用Object.wait()的线程正在等待另一个线程在该对象上调用Object.notify()或Object.notifyAll()。名为Thread.join()的线程正在等待指定的线程终止。
答案 3 :(得分:0)
停车表示暂停执行,直到获得许可为止。 许可是指继续执行的许可。 线程可以暂停其执行,直到获得许可为止。当许可证可用时,驻留线程将消耗它并退出 park()方法。
答案 4 :(得分:-1)
LockSupport - 类使用工具基本线程阻塞原语来创建锁和其他同步类。
方法park()禁用当前线程以进行线程调度,除非许可证可用。
unpark(线程线程)使得给定线程的许可证可用(如果它尚不可用)。
使用它像: 终于{ LockSupport.unpark(螺纹); }