Java并发多线程的6种状态

线程状态

  • 线程可以有以下6种状态
    1. New (新建)
    2. Runnable (可运行)
    3. Blocked (被阻塞)
    4. Waiting (等待)
    5. Timed waiting (计时等待)
    6. Terminated (被终止
    ![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190113212952836.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE5NjAxNA==,size_16,color_FFFFFF,t_70)
  • 新创建线程 (New)
    • 当用new创建了一个线程,但是该线程还没有开始运行时,那么他的状态就是new。
  • 可运行线程 (Runnable)
    • 一旦调用start方法,则该线程处于runnable状态,处于该状态的线程可能正在运行,也可能没有运行,这取决于能否抢到CPU的使用权。但是它始终保留可运行的权力,并在适当的时候来运行。
  • 被阻塞线程 (Blocked )
    • 当一个线程试图获取一个内部的对象锁时,而该锁被其他线程持有, 则该线程进人阻塞状态。当所有其他线程释放该锁,并且线程调度器允许本线程持有它的时候,该线程将变成非阻塞状态。
  • 等待线程 (Waiting)
    • 当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态。在调用 Object.wait 方法或 Thread.join 方法, 或者是等待 java,util.concurrent 库中的 Lock 或 Condition 时, 就会出现这种情况。实际上,被阻塞状态
      与等待状态是有很大不同的。
  • 计时等待线程 (Timed waiting)
    • 有几个方法有一个超时参数。调用它们导致线程进人计时等待( timed waiting ) 状态。这一状态将一直保持到超时期满或者接收到适当的通知。带有超时参数的方法有Thread.sleep 和 Object.wait、Thread.join、 Lock,tryLock 以及 Condition.await 的计时版。
  • 被终止线程 (Terminated)
    • 线程因如下两个原因之一而被终止:
    1. 因为 run 方法正常退出而自然死亡。
    2. 因为一个没有捕获的异常终止了 run 方法而意外死亡。

特别是,可以调用线程的 stop 方法杀死一个线程。该方法抛出 ThreadDeath 错误对象,由此杀死线程。但是,stop 方法已过时, 不要在自己的代码中调用这个方法。

posted @ 2019-06-30 15:35  Jack_T  阅读(255)  评论(0)    收藏  举报