线程状态详解

135 阅读2分钟
什么是线程
一个程序同时执行多个任务,每个任务称为一个线程,给人并发处理的感觉。

如果是单一线程,需要等待一个线程执行完毕后,才能执行下一个任务,如果一个类实现了
Runnable
接口类的
run
方法,并且使用
Thread t =
new
Thread(r);
创建
Tread
对象
使用t.start();开启线程。就能完成简单的多线程应用,但是这个方法不建议使用,单独创建一个线程的代价太大,我们应该使用线程池

中断线程
使用
CurrentTread
()返回当前执行线程,使用
interrupt
中断线程,线程状态将被设置为
true
,如果这个线程被
sleep
阻塞,那么就会抛出异常。

线程状态
线程有以下
6
中状态:

新创建(
new)
当用
new
操作符创建一个线程,如
new Thread(r)
,该线程还没有开始运行那么这个线程的状态就是
new

可运行(
Runnable)
一旦调用
start
方法,线程处于
runnable
状态,一个可运行的线程可能正在运行也可能没有运行,这取决去操作其他给线程提供的运行时间。

被阻塞
(Blocked)
当一个线程处于被阻塞和等待状态,它不运行任何代码且消耗的资源最少,当一个线程视图获取一个内部对象锁,而该锁被其他对象持有,则该线程进入阻塞状态,当所有线程释放该锁,并且线程调度器允许本线程持有它的时候,该线程变成非阻塞状态。


等待
(Waiting)
当线程等待另一个线程通知调度器一个条件时,这个线程进入等待状态

计时等待
(timed Waiting)
有几个方法有一个超时参数,调用它们导致线程进入计时等待状态,这一状态将保持到超时期满或者接收到适当的通知,带有超时参数方法有
Tread.sleep
Object.wait
Tread.Jion
Lock.Trylock
以及
Condition.await
的计时版。

中止
(Terminated)
线程因如下两个原因之一而被中止:
1. run
方法正常退出而自然消亡。
2.
因为一个没有捕获的异常终止了
run
方法而意外死亡。

更多技术咨询可关注:gzitcast