Java 线程的停止


  1. class Student implements Runnable  
  2. {  
  3.     public boolean flag=true;  
  4.     /*public void run() { 
  5.         while(flag) 
  6.         { 
  7.              
  8.             System.out.println(Thread.currentThread().getName()); 
  9.         } 
  10.     }*/  
  11.     public synchronized void run()  
  12.     {  
  13.         while(flag)  
  14.         {  
  15.             try {  
  16.                 wait();  
  17.                 System.out.println(Thread.currentThread().getName());  
  18.             }catch(Exception ex)  
  19.             {  
  20.                 System.out.println(Thread.currentThread().getName()+".......Exception");  
  21.                 flag=false;  
  22.             }  
  23.         }  
  24.     }  
  25. }  
  26. public class StopThread {  
  27.     public static void main(String args[])  
  28.     {  
  29.         Student stu=new Student();  
  30.         Thread t1=new Thread (stu);  
  31.         Thread t2=new Thread(stu);  
  32.         t1.start();  
  33.         t2.start();  
  34.         for(int i=0;i<100;i++)  
  35.         {  
  36.             System.out.println(Thread.currentThread().getName());  
  37.             stu.flag=false;  
  38.             t1.interrupt();  
  39.             t2.interrupt();  
  40.               
  41.               
  42.         }  
  43.     }  
  44. }  
  45. /* 
  46.  *                                      线程的停止 
  47.  *  在多线程中,线程一般都是循环执行的,而线程里面执行的代码就是run 方法里面定义的代码,如果run 函数运行结束,那么线程自然结束 
  48.  *  所以控制线程结束,就是控制run 方法里面的循环结束,也就是在某一个时刻设置线程运行的开关 
  49.  *   
  50.  *   
  51.  *  而在线程出于wait 状态下,你尽管改变了状态,但现在处于wait 状态,所有该现在就不能结束,那么要用线程里面的另一个方法: interrupt, 
  52.  *  interrupt 将清除wait sleep 的状态,接着运行程序,同时会抛出一个InterruptException ,所以可以在catch捕捉的异常里面设置 运行开关,而 
  53.  *  这种方法如果里面没有wait,将不会停止线程 
  54.  *   
  55.  *  所以由上面两点得出,要终止现在得有两点,一是在某一时刻,设置线程的运行开关,而且如果有wait 的话,那么就用interrupt ,然后捕捉异常,在异常 
  56.  *  里面设置 线程运行开关 
  57.  *   
  58.  *                                                                                              2011/10/24  20:49:21 
  59.  * */  

相关内容