一個工作了6年的Java程式員,在阿裡二面,被問到“volatile”關鍵字。 然後,就沒有然後了… 同樣,另外一個去美團面試的工作4年的小伙伴,也被“volatile關鍵字“。 然後,也沒有然後了… 這個問題說實話,是有點偏底層,但也的確是併發編程裡面比較重要的一個關鍵字。 下麵,我們來看看普通人 ...
轉自:
http://www.java265.com/JavaCourse/202204/3189.html
在java中我們引入中斷的目的是為了打斷線程現在所處的某種狀態,但是我們知道這種狀態一定是阻塞狀態;
線上程阻塞的時候,我們想要改變它阻塞的狀態,所以通常線上程sleep,wait,join的情況下我們可以使用中斷;
由於中斷可以捕獲,通過這種方式我們可以結束線程;
中斷不是結束線程,只不過發送了一個中斷信號而已,線程要退出還要我們加上自己的結束線程的操作。
下文筆者講述使用Java代碼中斷線程的方法分享,如下所示:
實現思路: 使用interrupt()方法進行線程中斷
在中斷前,我們可使用isInterrupted()方法,判斷一下線程是否已中斷
package com.java265.other; public class Test16 { public static void main(String[] args) throws Exception { MyThread2 a = new MyThread2(); // 啟動線程 a.start(); try { Thread.sleep(2000); } catch (InterruptedException x) { } System.out.println("in main() - 中斷其他線程"); a.interrupt(); System.out.println("in main() - 離開"); } } class MyThread2 extends Thread { public void run() { try { System.out.println("in run() - 將運行 work() 方法"); work(); System.out.println("in run() - 從 work() 方法回來"); } catch (InterruptedException x) { System.out.println("in run() - 中斷 work() 方法"); return; } System.out.println("in run() - 休眠後執行"); System.out.println("in run() - 正常離開"); } public void work() throws InterruptedException { while (true) { if (Thread.currentThread().isInterrupted()) { System.out.println("C isInterrupted()=" + Thread.currentThread().isInterrupted()); Thread.sleep(2000); System.out.println("D isInterrupted()=" + Thread.currentThread().isInterrupted()); } } } } -----運行以上代碼,將輸出以下信息----- in run() - 將運行 work() 方法 in main() - 中斷其他線程 in main() - 離開 C isInterrupted()=true in run() - 中斷 work() 方法