刚才是CSDN的问答; 看a的时候,发现了这个问题。 原问题的作者是观察jstack输出的疑问,BLOCKED和WAITING的区别是什么呢?
答案位于JDK源代码中。 以下是java.lang.Thread.State类的注释的一部分。
//*
* threadstateforathreadblockedwaitingforamonitorlock。
* athreadintheblockedstateiswaitingforamonitorlock
* toenterasynchronizedblock/method or
* reenterasynchronizedblock/methodaftercalling
* {@link Object#wait () Object.wait} )。
*/
块,
//*
* Thread state for a waiting thread。
* athreadisinthewaitingstateduetocallingoneofthe
*跟踪方法:
* {@link Object#wait () Object.wait} with no timeout
* {@link #join () Thread.join ) withnotimeout
* {@link LockSupport#park () LockSupport.park}
*
*
* athreadinthewaitingstateiswaitingforanotherthreadto
*性能参数操作。
*
* For example,athreadthathascalledobject.wait (
* onanobjectiswaitingforanotherthreadtocall
* object.notify (or object.notify all ) ) on
* that object.athreadthathascalledthread.join (
* iswaitingforaspecifiedthreadtoterminate。
*/
等待
从中可以清晰地得到线程处于BLOCKED和WAITING状态的场景。
已阻止状态线程处于已阻止状态的场景。
当前线程正在等待监视器锁定。 例如,您可能正在等待synchronized代码块的执行,或者等待如何使用synchronized标签。 以下是在同步块中循环调用Object类型wait方法的示例
是同步的(this )
{
是wile (标志)
{
obj.wait (;
() ) ) ) )。
//some other code
}等待状态线程处于等待状态的场景。
调用Object对象的wait方法,但没有指定超时值。 调用Thread对象的join方法,但没有指定超时值。 调用LockSupport对象的park方法。 提到WAITING状态,接着提到TIMED_WAITING状态的场景。
TIMED_WAITING状态线程处于TIMED_WAITING状态的场景。
调用Thread.sleep方法。 调用Object对象的wait方法并指定超时值。 调用Thread对象的join方法并指定超时值。 调用LockSupport对象的parkNanos方法。 调用LockSupport对象的parkUntil方法。 欢迎来到敏感的咖啡豆之家。 http://机智的樱桃athome.sinaapp.com/。 转载文章时,请注明出处。
版权声明:本文为博客原创文章,未经博客许可不得转载。 3359 blog.csdn.net/baby blue _ 963/article/details/47907625
https://blog.csdn.net/机智樱桃_ xiaonan/article/details/47907625