JAVA的interrupt()方法和執行緒終止的方式
阿新 • • 發佈:2019-02-19
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 }