成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java并發(fā)編程學(xué)習(xí)之線程的生命周期-interrupt(七)

maxmin / 1985人閱讀

摘要:和是配套使用的,方法容易導(dǎo)致死鎖。方法不會(huì)保證線程的資源正常釋放方法給線程打個(gè)停止標(biāo)記,將線程的中斷狀態(tài)設(shè)置為,并沒有馬上強(qiáng)制中斷線程,線程是否中斷由線程自己決定。終結(jié)狀態(tài),還是返回。方法判斷當(dāng)前線程是否中斷,清除中斷標(biāo)志。

resume、suspend、stop

resume和suspend是配套使用的,suspend方法容易導(dǎo)致死鎖。

stop方法不會(huì)保證線程的資源正常釋放

interrupt

interrupt()方法:給線程打個(gè)停止標(biāo)記,將線程的中斷狀態(tài)設(shè)置為true,并沒有馬上強(qiáng)制中斷線程,線程是否中斷由線程自己決定。

isInterrupted()方法:判斷當(dāng)前線程是否中斷,不清除中斷標(biāo)志。終結(jié)狀態(tài),還是返回false。

interrupted()方法:判斷當(dāng)前線程是否中斷,清除中斷標(biāo)志。

如果拋出異常,中斷狀態(tài)設(shè)置為false。

示例 例子1
public class InterruptThread extends Thread {
    @Override
    public void run() {
        while (true) {
        }
    }

    public static void main(String[] args) throws InterruptedException {
        InterruptThread thread = new InterruptThread();
        thread.start();
        System.out.println(thread.getState());
        sleep(1000);
        thread.interrupt();
        System.out.println(thread.getState());
        System.out.println(thread.isInterrupted());
    }
}

運(yùn)行結(jié)果如下

可以看出,雖然中斷狀態(tài)是true了,但是程序依然在運(yùn)行,所以interrupt并沒有強(qiáng)制中斷線程。

例子2
public class InterruptThread2 extends Thread {
    @Override
    public void run() {
        while (!isInterrupted()) {
        }
        System.out.println("已中斷");
    }

    public static void main(String[] args) throws InterruptedException {
        InterruptThread2 thread = new InterruptThread2();
        thread.start();
        System.out.println(thread.getState());
        sleep(1000);
        thread.interrupt();
        System.out.println(thread.getState());
        System.out.println(thread.isInterrupted());
    }
}

運(yùn)行結(jié)果如下:

跟例子1的區(qū)別是,通過判斷中斷狀態(tài),來處理我們自己的業(yè)務(wù)邏輯,這樣的設(shè)計(jì),給程序帶來了極大的利靈活性。

例子3
public class InterruptWait extends Thread {
    @Override
    public void run() {
        waitFun();
    }

    public synchronized void waitFun(){
        try {
            wait();
        } catch (InterruptedException e) {
            System.out.println("打擾我等待了");
        }

    }

    public static void main(String[] args) throws InterruptedException {
        InterruptWait thread = new InterruptWait();
        thread.start();
        System.out.println(thread.getState());
        sleep(1000);
        thread.interrupt();
        sleep(1000);
        System.out.println(thread.getState());
        System.out.println(thread.isInterrupted());
        sleep(1000);
        System.out.println(thread.getState());
    }
}

運(yùn)行結(jié)果如下:

中斷wait方法,這里需要注意的是,拋出異常后,中斷狀態(tài)變成false。

例子4
public class InterruptWait extends Thread {
    @Override
    public void run() {
        waitFun();
    }

    public synchronized void waitFun(){
        try {
            wait();
        } catch (InterruptedException e) {
            System.out.println("打擾我等待了");
        }

    }

    public static void main(String[] args) throws InterruptedException {
        InterruptWait thread = new InterruptWait();
        thread.start();
        System.out.println(thread.getState());
        sleep(1000);
        thread.interrupt();
        sleep(1000);
        System.out.println(thread.getState());
        System.out.println(thread.isInterrupted());
        sleep(1000);
        System.out.println(thread.getState());
    }
}

運(yùn)行結(jié)果如下:

結(jié)果同上,拋出異常后,中斷狀態(tài)變成false。

例子5
public class InterruptSync extends Thread {
    @Override
    public void run() {
        syncFun();
    }

    public static synchronized void syncFun() {
        while (true) {
        }
    }

    public static void main(String[] args) throws InterruptedException {
        InterruptSync thread = new InterruptSync();
        InterruptSync thread2 = new InterruptSync();
        thread.start();
        sleep(1000);
        thread2.start();
        sleep(1000);

        System.out.println(thread.getState());
        System.out.println(thread2.getState());

        thread2.interrupt();
        sleep(1000);
        System.out.println(thread2.getState());
        System.out.println(thread2.isInterrupted());

    }
}

運(yùn)行結(jié)果如下:

沒有拋異常,結(jié)果同例子1。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75248.html

相關(guān)文章

  • java并發(fā)編程學(xué)習(xí)之線程生命周期-wait,notify,notifyall(六)

    摘要:不釋放持有的鎖,釋放鎖。在調(diào)用方法前,必須持有鎖,調(diào)用喚醒,也要持有鎖。休眠一定時(shí)間后,進(jìn)入就緒狀態(tài)。這兩個(gè)都能被方法中斷當(dāng)前狀態(tài)。用法方獲取鎖判斷條件,不滿足繼續(xù)滿足執(zhí)行其他業(yè)務(wù)方獲取鎖改變條件通知為什么是而不是會(huì)一直循環(huán),直到條件滿足。 sleep和wait sleep是Thread類的方法,wait是Object的方法。 sleep可以到處使用,wait必須是在同步方法或者代碼...

    Terry_Tai 評論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之線程生命周期(一)

    摘要:就緒狀態(tài)調(diào)用或者由阻塞狀態(tài)被解除時(shí),進(jìn)入就緒狀態(tài),此時(shí),只能表示線程可以運(yùn)行了,但不代表已經(jīng)運(yùn)行了,需要等待的調(diào)度。死亡狀態(tài)當(dāng)線程執(zhí)行結(jié)束或者異常等,線程就會(huì)結(jié)束,進(jìn)入死亡狀態(tài)。 流程圖 showImg(https://segmentfault.com/img/bVbuJ6f); 新建狀態(tài) 當(dāng)用new創(chuàng)建一個(gè)線程后,線程就處于新建狀態(tài),此時(shí)和其他普通java對象一樣,由JVM創(chuàng)建內(nèi)存空...

    AndroidTraveler 評論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之線程生命周期-join(四)

    摘要:定義等待該線程終止,比如線程調(diào)用了線程的,那么線程要等到線程執(zhí)行完后,才可以繼續(xù)執(zhí)行。 定義 等待該線程終止,比如A線程調(diào)用了B線程的join,那么A線程要等到B線程執(zhí)行完后,才可以繼續(xù)執(zhí)行。 示例 public class JoinDemo { static class JoinThread1 implements Runnable { Thread thre...

    xavier 評論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之線程生命周期-start(二)

    摘要:與執(zhí)行方法,是用來啟動(dòng)線程的,此時(shí)線程處于就緒狀態(tài),獲得調(diào)度后運(yùn)行方法。執(zhí)行方法,相對于普通方法調(diào)用,在主線程調(diào)用。程序是順序執(zhí)行的,執(zhí)行完才會(huì)執(zhí)行下面的程序。 start與run 執(zhí)行start方法,是用來啟動(dòng)線程的,此時(shí)線程處于就緒狀態(tài),獲得調(diào)度后運(yùn)行run方法。run方法執(zhí)行結(jié)束,線程就結(jié)束。 執(zhí)行run方法,相對于普通方法調(diào)用,在主線程調(diào)用。程序是順序執(zhí)行的,執(zhí)行完才會(huì)執(zhí)行下...

    bigdevil_s 評論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之線程生命周期-sleep(五)

    摘要:在指定毫秒數(shù)內(nèi),讓正在執(zhí)行的當(dāng)前線程進(jìn)入休眠期。示例運(yùn)行結(jié)果如下結(jié)果可以看出,線程的兩次時(shí)間相差毫秒,的兩次時(shí)間相差毫秒,只影響自己的線程運(yùn)行,不影響其他線程。 sleep 在指定毫秒數(shù)內(nèi),讓正在執(zhí)行的當(dāng)前線程進(jìn)入休眠期。 示例 public class SleepDemo extends Thread { @Override public void run() { ...

    xi4oh4o 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<