1. 程式人生 > >JAVA的interrupt()方法和執行緒終止的方式

JAVA的interrupt()方法和執行緒終止的方式

複製程式碼
 1 // Demo3.java的原始碼
 2 class MyThread extends Thread {
 3 
 4     private volatile boolean flag= true;
 5     public void stopTask() {
 6         flag = false;
 7     }
 8     
 9     public MyThread(String name) {
10         super(name);
11     }
12 
13     @Override
14     public void run() {
15         synchronized
(this) { 16 try { 17 int i=0; 18 while (flag) { 19 Thread.sleep(100); // 休眠100ms 20 i++; 21 System.out.println(Thread.currentThread().getName()+" ("+this.getState()+") loop " + i); 22 }
23 } catch (InterruptedException ie) { 24 System.out.println(Thread.currentThread().getName() +" ("+this.getState()+") catch InterruptedException."); 25 } 26 } 27 } 28 } 29 30 public class Demo3 { 31 32 public static void main(String[] args) {
33 try { 34 MyThread t1 = new MyThread("t1"); // 新建“執行緒t1” 35 System.out.println(t1.getName() +" ("+t1.getState()+") is new."); 36 37 t1.start(); // 啟動“執行緒t1” 38 System.out.println(t1.getName() +" ("+t1.getState()+") is started."); 39 40 // 主執行緒休眠300ms,然後主執行緒給t1發“中斷”指令。 41 Thread.sleep(300); 42 t1.stopTask(); 43 System.out.println(t1.getName() +" ("+t1.getState()+") is interrupted."); 44 45 // 主執行緒休眠300ms,然後檢視t1的狀態。 46 Thread.sleep(300); 47 System.out.println(t1.getName() +" ("+t1.getState()+") is interrupted now."); 48 } catch (InterruptedException e) { 49 e.printStackTrace(); 50 } 51 } 52 }
複製程式碼