在Java API中,提供了關於線程中斷的兩個方法。Thread.interrupt()方法會給線程設置一箇中斷狀態,Thread.interrupted()則用來判斷中斷狀態。java
下面咱們來看一個例子:ide
定義一個線程類,咱們在run()方法中定義一個循環來判斷線程中斷狀態,一旦線程中斷狀態爲true,結束線程並打印中斷信息。線程
public class Task implements Runnable { @Override public void run() { System.out.printf("%s: I am starting work.\n", Thread.currentThread().getName()); try { while (true) { if (Thread.interrupted()) throw new InterruptedException(); } } catch (InterruptedException e) { System.out.printf("%s: I am interrupted.\n", Thread.currentThread().getName()); } } }
定義主方法類,在主方法類中咱們啓動這個線程並持續一段時間後設置這個子線程線程的中斷狀態。日誌
public class Main { public static void main(String[] args) { Task task = new Task(); Thread thread = new Thread(task); thread.start(); try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } System.out.printf("%s: Setting interrupt flag.\n", Thread.currentThread().getName()); thread.interrupt(); } }
查看控制檯日誌你會發現,在主線程中設置子線程中斷狀態後,子線程終止執行。code
Thread-0: I am starting work. main: Setting interrupt flag. Thread-0: I am interrupted.