线程死亡:
线程会以如下3种方式结束,结束后就处于死亡状态。
1、run()或call()方法执行完成,线程正常结束。
2、线程抛出一个未捕获的Exception或Error
3、直接调用该线程的stop方法结束该线程---该方法容易导致死锁,通常不推荐使用。
为了测试某个线程是否已经死亡,可以调用线程对象isAlive()方法,当线程处于就绪、运行、阻塞三种状态时,该方法返回true;当线程处于新建、死亡两种状态,该方法将返回false。
注意:不要试图对一个死亡的线程调用start方法使它重新启动,死亡就是死亡,该线程不可能再次作为线程执行。(如果重新启动的话,运行之后将引发IllegalThreadStateException异常,这表明处于死亡状态的线程无法再次运行了。)
1 public class StartDead extends Thread { 2 private int i; 3 public void run(){ 4 for(;i<30;i++){ 5 try{sleep(1000); 6 System.out.println(getName()+" "+i);}catch(Exception e){ 7 System.out.println(e); 8 } 9 } 10 11 } 12 public static void main(String[] args){ 13 StartDead s=new StartDead(); 14 for(int k=0;k<100;k++){ 15 //Thread.sleep(1000); 16 try{System.out.println("当先线程的名字是:"+Thread.currentThread().getName()+" "+k); 17 Thread.sleep(1000);}catch(Exception e){ 18 System.out.println(e); 19 } 20 if(k==5){ 21 s.start(); 22 System.out.println(s.isAlive()); 23 } 24 if(k>5&& !s.isAlive()){ 25 s.start(); 26 } 27 } 28 } 29 }