欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java中實現(xiàn)線程的超時中斷方法實例-創(chuàng)新互聯(lián)

背景

創(chuàng)新互聯(lián)公司是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的十余年時間我們累計服務(wù)了上千家以及全國政企客戶,如成都宣傳片制作等企業(yè)單位,完善的項目管理流程,嚴(yán)格把控項目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實力獲得客戶的一致稱揚(yáng)。

之前在實現(xiàn)熔斷降級組件時,需要實現(xiàn)一個接口的超時中斷,意思是,業(yè)務(wù)在使用熔斷降級功能時,在平臺上設(shè)置了一個超時時間,如果在請求進(jìn)入熔斷器開始計時,并且接口在超時時間內(nèi)沒有響應(yīng),則需要提早中斷該請求并返回。

比如正常下游接口的超時時間為800ms,但是因為自身業(yè)務(wù)的特殊需求,最多只能等200ms,如果200ms之內(nèi)沒有數(shù)據(jù)返回,則返回降級數(shù)據(jù)。這里處理請求的線程可以看成是tomcat線程池中的一個線程,如果通過線程池返回的Future,可以很輕松的實現(xiàn)超時返回,但是這種情況下,并不能拿到Futrue,需要換一種思路。

思路

中斷一個線程的思路有哪些?

除了已經(jīng)廢棄的Thread.stop, Thread.suspend, Thread.resume 方法,剩下的貌似只有一種方案了,就是調(diào)用當(dāng)前線程的 interrupt() ,但是這個方法的作用并不是中斷線程,而是設(shè)置一個標(biāo)識,通知該線程可以被中斷了,到底是繼續(xù)執(zhí)行,還是中斷返回,由線程本身自己決定。

具體來說,當(dāng)對一個線程調(diào)用了 interrupt() 之后,如果該線程處于被阻塞狀態(tài)(比如執(zhí)行了wait、sleep或join等方法),那么會立即退出阻塞狀態(tài),并拋出一個 InterruptedException 異常,在代碼中catch這個異常進(jìn)行后續(xù)處理。如果線程一直處于運(yùn)行狀態(tài),那么只會把該線程的中斷標(biāo)志設(shè)置為 true,僅此而已,所以 interrupt() 并不能真正的中斷線程,不過在rpc調(diào)用的場景中,請求線程一般都處于阻塞狀態(tài),等待數(shù)據(jù)返回,這時 interrupt() 方法是可以派上用場的。

那么,要實現(xiàn)指定超時時間內(nèi)中斷請求線程,還有最后一個問題需要解決:什么時候,由誰去執(zhí)行 interrupt() 方法?

必然這個方法只能由其它線程來執(zhí)行了(自己都阻塞了,執(zhí)行個鬼),而且是在請求進(jìn)入熔斷器時,并在超時時間之后執(zhí)行,有點繞,比如超時時間是200ms,那么請求進(jìn)入熔斷器之后,再過200ms,就執(zhí)行 interrupt() ,但是在200ms之內(nèi)有數(shù)據(jù)返回,那么就不執(zhí)行 interrupt() 了。

實現(xiàn)


需求已經(jīng)很明確了,相當(dāng)于延遲執(zhí)行一個task,其內(nèi)部邏輯就是執(zhí)行請求線程的 interrupt() ,當(dāng)然還有其它的邏輯。

Runnable task = new Runnable() {
 @Override
 public void run() {
  try {
   thread.interrupt();
   // 取消定時器任務(wù)
   f.cancel();
  } catch (Exception e) {
   logger.error("Failed while ticking TimerListener", e);
  }
 }
};

文章標(biāo)題:Java中實現(xiàn)線程的超時中斷方法實例-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://www.chinadenli.net/article8/dgejop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)電子商務(wù)網(wǎng)站制作網(wǎng)站改版外貿(mào)建站面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站