线程是从创建到执行完毕,总共有6个状态,
1. New(新建态)
当用new操作符创建一个新线程时,如 new Thread(r), 该线程还没有开始运行。这意味着它的状态是new。
2. Runnable(运行态)
一旦线程调用start()方法,线程就处于runnable状态。
3. Blocked(阻塞态)
受阻塞并等待某个监视器锁的线程处于这种状态。
4. Waiting(等待态)
无限期地等待另一个线程来执行。某一特定操作的线程处于这种状态。
5.Timed Waiting(计时等待态)
当线程处于被阻塞或等待状态时,它暂时不活动。它不运行任何代码且消耗最少的资源。直到线程调度器重新激活它。细节取决于它是怎样达到非活动状态的。
6. Terminated(终止态)
线程因如下两个原因之一而被终止:
1) 因为run方法正常退出而自然死亡
2) 因为一个没有捕获的异常终止了run方法意外死亡
各状态是可以转换的,借用网络上一图说明各状态的转换:
简单示例:
本例说明了三个状态:新建后为NEW状态,start()后为RUNNABLE状态,线程执行结束后为TERMINATED态。
其完整代码如下:
本例仅简单演示这三个状态,简单起见,我让run()方法的方法体为空。
public class ThreadLearn implements Runnable{
public void run() { }
public static void main(String args[]) {
ThreadLearn target1=new ThreadLearn();//创建类的一个对象
Thread thread=new Thread(target1,"lay");//创建线程类的对象,target1为线程的目标对象,线程名为“奇数”
System.out.println("new 后"+thread.getName()+"线程的状态是:"+thread.getState());
thread.start();//启动线程
System.out.println("start 后"+thread.getName()+"线程的状态是:"+thread.getState());
System.out.println("start 后"+thread.getName()+"线程是否活动中:"+thread.isAlive());
System.out.println("start 后"+thread.getName()+"线程的状态是:"+thread.getState())
}
}
其运行结果如下:
联系客服