java線程相關(guān)

中斷一個(gè)正在運(yùn)行的線程

  1. 中斷阻塞線程的方法
@Override
public void run() {
    try {
        while (true) {
            // 執(zhí)行任務(wù)...
        }
    } catch (InterruptedException ie) {  
        // 由于產(chǎn)生InterruptedException異常,退出while(true)循環(huán),線程終止!
    }
}

我們調(diào)用線程對(duì)象的interrupt()方法時(shí)會(huì)產(chǎn)生InterruptedException中斷。中斷的捕獲在while(true)之外,這樣就退出了while(true)循環(huán)!
2.終止處于運(yùn)行狀態(tài)的線程

@Override
public void run() {
    while (!isInterrupted()) {
        // 執(zhí)行任務(wù)...
    }
}

isInterrupted()是判斷線程的中斷標(biāo)記是不是為true。當(dāng)線程處于運(yùn)行狀態(tài),并且我們需要終止它時(shí);可以調(diào)用線程的interrupt()方法,使用線程的中斷標(biāo)記為true,即isInterrupted()會(huì)返回true。此時(shí),就會(huì)退出while循環(huán)。
3.通過(guò)標(biāo)志位中斷線程

private volatile boolean flag= true;
protected void stopTask() {
    flag = false;
}
@Override
public void run() {
    while (flag) {
        // 執(zhí)行任務(wù)...
    }
}

通過(guò)volatile變量保證內(nèi)存的可見(jiàn)性,從而保證多線程設(shè)置標(biāo)志位終止線程

線程的join()方法

public class JoinTest implements Runnable{  
      
    public static int a = 0;  
  
    public void run() {  
        for (int k = 0; k < 5; k++) {  
            a = a + 1;  
        }  
    }  
  
    public static void main(String[] args) throws Exception {  
        Runnable r = new JoinTest();  
        Thread t = new Thread(r);  
        t.start();        
        System.out.println(a);  
    }         
}  

正常情況下,打印出來(lái)a的值不確定,因?yàn)橹骶€程啟動(dòng)t之后繼續(xù)往下走,執(zhí)行打印語(yǔ)句,此時(shí)子線程執(zhí)行到哪一步還不確定,所以a的值不能確定,如果我想在執(zhí)行完子線程之后再打印怎么實(shí)現(xiàn)呢,如下:

public static void main(String[] args) throws Exception {  
        Runnable r = new JoinTest();  
        Thread t = new Thread(r);  
        t.start();        
        t.join(); //加入join()  
        System.out.println(a);  
    }

改為如下代碼即可實(shí)現(xiàn)子線程執(zhí)行完在執(zhí)行打印語(yǔ)句,join()方法其實(shí)就是當(dāng)前線程等待調(diào)用join()方法的線程執(zhí)行完在繼續(xù)執(zhí)行當(dāng)前線程的代碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 下面是Java線程相關(guān)的熱門(mén)面試題,你可以用它來(lái)好好準(zhǔn)備面試。 1) 什么是線程? 線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度...
    冰箱哥哥閱讀 558評(píng)論 0 2
  • Java線程相關(guān)方法 1. sleep public static native void sleep(long ...
    Leocat閱讀 345評(píng)論 0 0
  • Java 線程相關(guān) 如何創(chuàng)建線程(兩種方式,區(qū)別,使用場(chǎng)景)線程狀態(tài)調(diào)度多線程數(shù)據(jù)共享(會(huì)有什么問(wèn)題,如何實(shí)現(xiàn)共享...
    一灰灰blog閱讀 317評(píng)論 0 0
  • 誰(shuí)把灰色涂抹云端 遮住太陽(yáng)的暖 放眼望去,五彩六色的花朵 飄落在淺夏的季節(jié) 花飛花滿天 誰(shuí)會(huì)在意,心底那份珍惜 有...
    一滴露水閱讀 226評(píng)論 14 9
  • 很早以前聽(tīng)過(guò)這樣的話,說(shuō)一些主管招聘的時(shí)候都會(huì)招一些長(zhǎng)得漂亮的女孩,因?yàn)殚L(zhǎng)得漂亮的女孩,坐在面前都很養(yǎng)眼。細(xì)細(xì)聽(tīng)來(lái)...
    梅子Mey閱讀 501評(píng)論 6 2

友情鏈接更多精彩內(nèi)容