国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java 線程中斷(interrupt)與阻塞 (park)的區(qū)別

王偉廷 / 2906人閱讀

摘要:很多開發(fā)人員包括我,尤其是剛進(jìn)入軟件行業(yè)的新手,認(rèn)為設(shè)置線程中斷就是表示線程停止了,不往前執(zhí)行了,其實不是這樣的,線程中斷只是一個狀態(tài)而已,表示已中斷,表示未中斷獲取線程中斷狀態(tài),如果中斷了返回否則返回設(shè)置線程中斷不影響線程的繼續(xù)執(zhí)行,但是

? ? 很多Java開發(fā)人員(包括我),尤其是剛進(jìn)入軟件行業(yè)的新手,認(rèn)為Java設(shè)置線程中斷就是表示線程停止了,不往前執(zhí)行了,

Thread.currentThread().interrupt()

? ?其實不是這樣的,線程中斷只是一個狀態(tài)而已,true表示已中斷,false表示未中斷

//獲取線程中斷狀態(tài),如果中斷了返回true,否則返回false
Thread.currentThread().isInterrupted()
? 設(shè)置線程中斷不影響線程的繼續(xù)執(zhí)行,但是線程設(shè)置中斷后,線程內(nèi)調(diào)用了wait、jion、sleep方法中的一種, 立馬拋出一個 InterruptedException,且中斷標(biāo)志被清除,重新設(shè)置為false。

class Thread2 implements Runnable{

    @Override
    public void run() {
        try {
            System.out.println();
            System.out.println(hread.currentThread().isInterrupted());//輸出false
            Thread.currentThread().interrupt();//當(dāng)前線程中斷
            System.out.println("Thread.currentThread().isInterrupted());//輸出true
            Thread.sleep(3000);//中斷后執(zhí)行sleep會拋出異常
        } catch (InterruptedException e) {
            e.printStackTrace();
            System.out.println("Thread.currentThread().isInterrupted());//輸出false
        }
       
    }
}

該如何讓線程真正停止不往前執(zhí)行呢:
?真正讓線程停止下來(阻塞),Java提供了一個較為底層的并發(fā)工具類:LockSupport,該類常用的方法有兩個,1?

park(Object blocker) 表示阻塞指定線程,參數(shù)blocker當(dāng)前線程對象 2 unpark(Thread thread) 喚醒指定線程,參數(shù)thread指定線程對象
示例:

 public void test_LockSupport(){
      Thread thread=new Thread(new Thread_park());
      thread.start();//阻塞當(dāng)前線程
      Thread thread2=new Thread(new Thread_unpark(thread));
      thread2.start();//喚醒被阻塞的線程
  }

  class Thread_park implements  Runnable{
    @Override
    public void run() {
        System.out.println("Thread_park開始");
        LockSupport.park(this);//阻塞當(dāng)前線程
        System.out.println("Thread_park結(jié)束");
     }
  }

 class Thread_unpark implements  Runnable{
    private Thread thread;

    public Thread_unpark(Thread thread) {
        this.thread = thread;
    }

    @Override
    public void run() {
        System.out.println("Thread_unpark開始");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        LockSupport.unpark(thread);//喚醒被阻塞的線程
        System.out.println("Thread_unpark結(jié)束");
    }
}

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/77127.html

相關(guān)文章

  • Java Executors 源碼分析

    摘要:表示一個異步任務(wù)的結(jié)果,就是向線程池提交一個任務(wù)后,它會返回對應(yīng)的對象。它們分別提供兩個重要的功能阻塞當(dāng)前線程等待一段時間直到完成或者異常終止取消任務(wù)。此時,線程從中返回,然后檢查當(dāng)前的狀態(tài)已經(jīng)被改變,隨后退出循環(huán)。 0 引言 前段時間需要把一個C++的項目port到Java中,因此時隔三年后重新熟悉了下Java。由于需要一個通用的線程池,自然而然就想到了Executors。 用了...

    itvincent 評論0 收藏0
  • 小馬哥Java面試題課程總結(jié)

    摘要:無限期等待另一個線程執(zhí)行特定操作。線程安全基本版請說明以及的區(qū)別值都不能為空數(shù)組結(jié)構(gòu)上,通過數(shù)組和鏈表實現(xiàn)。優(yōu)先考慮響應(yīng)中斷,而不是響應(yīng)鎖的普通獲取或重入獲取。只是在最后獲取鎖成功后再把當(dāng)前線程置為狀態(tài)然后再中斷線程。 前段時間在慕課網(wǎng)直播上聽小馬哥面試勸退(面試虐我千百遍,Java 并發(fā)真討厭),發(fā)現(xiàn)講得東西比自己拿到offer還要高興,于是自己在線下做了一點小筆記,供各位參考。 課...

    FingerLiu 評論0 收藏0
  • Java concurrent 源碼學(xué)習(xí)筆記2 - 鎖

    摘要:同步器的實現(xiàn)根據(jù)其狀態(tài)是否獨占而有所不同。這個框架為同步狀態(tài)的原子性管理線程的阻塞和解除阻塞以及排隊提供了一種通用的機制。在需要使用同步器的目標(biāo)類中,繼承了的子類要求被聲明為目標(biāo)類的非公有內(nèi)部類。類通過一組方法實現(xiàn)線程的阻塞和解除阻塞。 java.util.concurrent.locks包主要是提供線程通信的鎖,下面看一下包中有哪些類。 showImg(https://segment...

    vpants 評論0 收藏0
  • 淺談Java并發(fā)編程系列(八)—— LockSupport原理剖析

    摘要:此對象在線程受阻塞時被記錄,以允許監(jiān)視工具和診斷工具確定線程受阻塞的原因。阻塞當(dāng)前線程,最長不超過納秒,返回條件在的基礎(chǔ)上增加了超時返回。喚醒線程喚醒處于阻塞狀態(tài)的線程。 LockSupport 用法簡介 LockSupport 和 CAS 是Java并發(fā)包中很多并發(fā)工具控制機制的基礎(chǔ),它們底層其實都是依賴Unsafe實現(xiàn)。 LockSupport是用來創(chuàng)建鎖和其他同步類的基本線程阻塞...

    jeyhan 評論0 收藏0

發(fā)表評論

0條評論

王偉廷

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<