在
API
中
java.lang.Thread.State
这个枚举中给出了六种线程状态:
new (新建) 线程刚被创建,但是还没有调用start()
Runnable(可运行状态) 线程可以在java虚拟机中运行的状态,可能正在运行自己的代码,也可能没有,zheq这取决于cpu
Blocked (阻塞状态) 当一个线程试图获得一个对象锁,而这个对象锁被其他的线程持有,该线程进入到了Blocked状态,当该线程重新获得锁时进入Runnable状态
Waiting(无线等待) 一个线程等待另一个线程执行一个(唤醒)动作时,该线程进入Waiting状态,进入这个态是不能自动唤醒的
必须等待另一个线程调用notify或者notifyAll 方法才能唤醒
TimedWaiting(计时等待)
同
waiting
状态,有几个方法有超时参数,调用他们将进入
Timed Waiting
状态。这一状态
将一直保持到超时期满或者接收到唤醒通知。带有超时参数的常用方法有
Thread.sleep
、
Object.wait
。
Teminated(被终止)因为
run
方法正常退出而死亡,或者因为没有捕获的异常终止了
run
方法而死亡。
Timed Waiting
(计时等待)
1.
进入
TIMED_WAITING
状态的一种常见情形是调用的
sleep
方法,单独的线程也可以调用,不一定非要有协
作关系。
2.
为了让其他线程有机会执行,可以将
Thread.sleep()
的调用
放线程
run()
之内
。这样才能保证该线程执行过程
中会睡眠
3. sleep
与锁无关,线程睡眠到期自动苏醒,并返回到
Runnable
(可运行)状态。
sleep()
中指定的时间是线程不会运行的最短时间。因此,
sleep()
方法不能保证该线程睡眠到期后就
开始立刻执行。
BLOCKED
(锁阻塞)
Waiting
(无限等待)