1. 线程状态
线程可以有6中状态:
New(新创建)
Runnable(可运行)
Blocked(被阻塞)
Waiting(等待)
Timed Waiting(计时等待)
Terminated(被终止)
1.1 可运行线程
一旦调用start方法,线程就处于runnable状态。该线程可能正在运行也可能没有运行。
1.2 被阻塞线程和等待线程
当线程处于被阻塞或等待状态时,它暂时不活动。
- 当一个线程获取一个内部的对象锁(而不是java.util.concurrent库中的锁),而该锁被其他线程持有,则该线程进入阻塞状态。当所有其他线程释放该锁,并且线程调度器允许本线程持有它的时候,该线程将变成非阻塞状态。
- 当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态。
- 有几个方法有一个超时参数。通知它们导致线程进入计时等待状态。
1.3 被终止的线程
线程因如下两个原因被终止:
- 因为run方法正常退出而自然死亡;
- 因为一个没有捕获的异常终止了run方法而意外死亡。