Java并发多线程的6种状态
线程状态
- 线程可以有以下6种状态
1. New (新建)
2. Runnable (可运行)
3. Blocked (被阻塞)
4. Waiting (等待)
5. Timed waiting (计时等待)
6. Terminated (被终止
 - 新创建线程 (New)
- 当用new创建了一个线程,但是该线程还没有开始运行时,那么他的状态就是new。
- 可运行线程 (Runnable)
- 一旦调用start方法,则该线程处于runnable状态,处于该状态的线程可能正在运行,也可能没有运行,这取决于能否抢到CPU的使用权。但是它始终保留可运行的权力,并在适当的时候来运行。
- 被阻塞线程 (Blocked )
- 当一个线程试图获取一个内部的对象锁时,而该锁被其他线程持有, 则该线程进人阻塞状态。当所有其他线程释放该锁,并且线程调度器允许本线程持有它的时候,该线程将变成非阻塞状态。
- 等待线程 (Waiting)
- 当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态。在调用 Object.wait 方法或 Thread.join 方法, 或者是等待 java,util.concurrent 库中的 Lock 或 Condition 时, 就会出现这种情况。实际上,被阻塞状态
与等待状态是有很大不同的。
- 当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态。在调用 Object.wait 方法或 Thread.join 方法, 或者是等待 java,util.concurrent 库中的 Lock 或 Condition 时, 就会出现这种情况。实际上,被阻塞状态
- 计时等待线程 (Timed waiting)
- 有几个方法有一个超时参数。调用它们导致线程进人计时等待( timed waiting ) 状态。这一状态将一直保持到超时期满或者接收到适当的通知。带有超时参数的方法有Thread.sleep 和 Object.wait、Thread.join、 Lock,tryLock 以及 Condition.await 的计时版。
- 被终止线程 (Terminated)
- 线程因如下两个原因之一而被终止:
- 因为 run 方法正常退出而自然死亡。
- 因为一个没有捕获的异常终止了 run 方法而意外死亡。
特别是,可以调用线程的 stop 方法杀死一个线程。该方法抛出 ThreadDeath 错误对象,由此杀死线程。但是,stop 方法已过时, 不要在自己的代码中调用这个方法。
浙公网安备 33010602011771号