线程状态可以分为6中:
New(新创建)
Runnable(可运行)
Blocked(被阻塞)
Waiting(等待)
Timed waiting(计时等待)
Terminated(被终止)
要确定一个线程的当前状态,可调用getState方法
1.新创建线程:
如 new Thread(r),该线程还没有开始运行
2.可运行线程:
一旦调用了start方法,线程处于runnable状态。一个可运行的线程可能正在运行也可能没有运行,这取决于操作系统给线程提供的运行时间,一个正在运行的线程仍然处于可运行状态
线程是否处于运行依赖于系统提供的服务,一般的系统都使用抢占式调度,一个线程只有调用yield方法、或者被阻塞或等待时,线程才失去控制权。
3.被阻塞线程和等待线程:
当线程处于被阻塞或等待状态时,它暂时不活动,它不运行任何代码且消耗最小的资源。
当一个线程视图获取一个内部的对象锁,而该锁被其他线程持有,则该线程进入阻塞状态
当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态
有几个方法有一个超时参数。调用它们导致线程进入计时等待状态
4.被终止的线程:
线程因如下两个原因之一而被终止:
因为run方法正常退出而自然死亡
因为一个没有捕获的异常终止了run方法而意外死亡
5.java.lang.Thread 1.0:
void join()
等待终止指定的线程
void join(long millis)
等待指定的线程死亡或经过指定的毫秒数
Thread.State getState() 5.0
得到这一线程的状态;NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING或TERMINATED之一
void stop()
停止该线程。这一方法已经过时
void suspend()
暂停这一线程的执行。这一方法已过时
void resume()
恢复线程。这一方法仅仅在调度suspend()之后调用。这一方法已过时