zoukankan      html  css  js  c++  java
  • 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/,如需转载文章,请注明出处。
  • 相关阅读:
    指数
    汉诺塔问题
    只用递归和当前的栈实现栈的逆序
    让你996的不是你的老板,而是其他愿意996的人
    luke towan
    2020-9-3
    2020-9-3
    springboot注解
    2020-9-2
    20200827
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7232061.html
Copyright © 2011-2022 走看看