• Java线程状态中BLOCKED和WAITING有什么差别?


    刚才在看CSDN的问答时。发现这个问题。

    原问题的作者是在观察jstack的输出时提出的疑问。那么BLOCKED和WAITING有什么差别呢?
    答复在JDK源代码中能够找到,例如以下是java.lang.Thread.State类的一部分凝视。

    /**
    * Thread state for a thread blocked waiting for a monitor lock.
    * A thread in the blocked state is waiting for a monitor lock
    * to enter a synchronized block/method or
    * reenter a synchronized block/method after calling
    * {@link Object#wait() Object.wait}.
    */
    BLOCKED,

    /**
    * Thread state for a waiting thread.
    * A thread is in the waiting state due to calling one of the
    * following methods:
    * {@link Object#wait() Object.wait} with no timeout
    * {@link #join() Thread.join} with no timeout
    * {@link LockSupport#park() LockSupport.park}
    *
    *
    * A thread in the waiting state is waiting for another thread to
    * perform a particular action.
    *
    * For example, a thread that has called Object.wait()
    * on an object is waiting for another thread to call
    Object.notify() or Object.notifyAll() on
    * that object. A thread that has called Thread.join()
    * is waiting for a specified thread to terminate.
    */
    WAITING,

    从中能够清晰的得到线程处于BLOCKED和WAITING状态的场景。

    BLOCKED状态

    线程处于BLOCKED状态的场景。

    • 当前线程在等待一个monitor lock,比方等待运行synchronized代码块或者使用synchronized标记的方法。

    • 在synchronized块中循环调用Object类型的wait方法,例如以下是例子
      synchronized(this)
      {
      while (flag)
      {
      obj.wait();
      }
      // some other code
      }

    WAITING状态

    线程处于WAITING状态的场景。

    • 调用Object对象的wait方法,但没有指定超时值。

    • 调用Thread对象的join方法,但没有指定超时值。

    • 调用LockSupport对象的park方法。

    提到WAITING状态,顺便提一下TIMED_WAITING状态的场景。

    TIMED_WAITING状态

    线程处于TIMED_WAITING状态的场景。

    • 调用Thread.sleep方法。
    • 调用Object对象的wait方法,指定超时值。

    • 调用Thread对象的join方法,指定超时值。
    • 调用LockSupport对象的parkNanos方法。
    • 调用LockSupport对象的parkUntil方法。
    欢迎訪问Jackie的家。http://jackieathome.sinaapp.com/,如需转载文章,请注明出处。
  • 相关阅读:
    ps_基于2020的官方教程
    杂记_好玩的
    linux _文件目录与权限
    levelDb笔记
    《好学的C++ 第2版》 第9章 一些高级编程技术
    《好学的C++ 第2版》 第8章 文件-电子存储
    《好学的C++ 第2版》 第7章 字符串--分析文本
    《好学的C++ 第2版》 第6章 指针--我知道数据在哪里
    《好学的C++ 第2版》 第5章 数组--都给我排好队
    《好学的C++ 第2版》 第4章 函数--分工与合作
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7232061.html
Copyright © 2020-2023  润新知