首页 > 编程知识 正文

线程状态,BLOCKED和WAITING有什么区别,线程wait和block的区别

时间:2023-05-04 14:54:01 阅读:179682 作者:1388

刚才是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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。