最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于JDK8總結(jié)java中的interrupt

 更新時(shí)間:2017年12月19日 13:48:57   作者:Blog of Kami Wan  
本文是基于JDK8總結(jié)java中的interrupt知識(shí),需要的朋友可以參考下

1. interrupt知識(shí)點(diǎn)

 以下總結(jié)基于JDK8

本文不會(huì)完整說明interrupt,只會(huì)羅列一些比較重要的點(diǎn)。完整了解Thread.interrupt可以看參考資料。

以下的一些理解新的有助于理解參考資料的文章:

interrupt方法調(diào)用后,針對(duì)BLOCKED狀態(tài)的線程,只是設(shè)定中斷標(biāo)志位為true。是否響應(yīng)中斷(感知這個(gè)標(biāo)志位的變化)取決于API的設(shè)計(jì)。JDK的阻塞IO API、Synchronized同步塊、還有Lock中的很多方法(不包括lockInterruptibly)都是不響應(yīng)中斷的。當(dāng)然調(diào)用線程可以利用標(biāo)志位判斷來使得自己設(shè)計(jì)的API是可響應(yīng)中斷的。

interrupt方法調(diào)用后,針對(duì)WAITING/TIMED_WAITING狀態(tài)的線程,會(huì)上拋interruptedException**并且設(shè)置中斷標(biāo)志位false**。例如線程調(diào)用Thread.sleep,Object.wait()之后。

如果線程尚未啟動(dòng)(NEW),或者已經(jīng)結(jié)束(TERMINATED),則調(diào)用interrupt()對(duì)它沒有任何效果,中斷標(biāo)志位也不會(huì)被設(shè)置。

最佳實(shí)踐:有時(shí)候一些方法設(shè)計(jì)上不允許被中斷或者取消,但是當(dāng)別的線程發(fā)來中斷請(qǐng)求的時(shí)候,也需要進(jìn)行標(biāo)記的保留,方便其他調(diào)用方“了解情況”

public Task getNextTask(BlockingQueue<Task> queue) {
 boolean interrupted = false;
 try {
  while (true) {
   try {
    return queue.take();
   } catch (InterruptedException e) {
    //fianlly中依賴的狀態(tài)標(biāo)記
    interrupted = true;
    // fall through and retry
   }
  }
 } finally {
  if (interrupted)
  //在fianlly中重新標(biāo)記,確保沒有丟失中斷通知
   Thread.currentThread().interrupt();
 }
}

利用中斷可以實(shí)現(xiàn)一些cancel的操作。例如:

package concurrent;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * Created by wanshao
 * Date: 2017/12/18
 * Time: 下午3:42
 **/
public class InterruptExample {
 public static void main(String[] args) throws InterruptedException {
  InterruptTask interruptTask = new InterruptTask();
  ExecutorService executorService = Executors.newSingleThreadExecutor();
  executorService.submit(interruptTask);
  Thread.sleep(100);
  interruptTask.cancel();
  executorService.shutdown();
 }
}
/**
 * 一個(gè)響應(yīng)中斷的任務(wù)
 */
class InterruptTask implements Callable<Integer> {
 private BlockingQueue<Task> queue;
 //保存要被interrupt的線程
 Thread t;
 @Override
 public Integer call() throws InterruptedException {
  System.out.println("start a blocked task");
  try {
   t = Thread.currentThread();
   Thread.currentThread().sleep(50000);
  } catch (InterruptedException e) {
   System.out.println("be interrupted");
   e.printStackTrace();
  }
  return 0;
 }
 public void cancel() {
  System.out.println("cacel a task....");
  //這里直接調(diào)用Thread.currentThread()會(huì)獲取到main線程,而不是線程池里面的線程
  if (!t.isInterrupted()) {
   t.interrupt();
  }
 }
}

總結(jié)

以上所述是小編給大家介紹的基于JDK8總結(jié)java中的interrupt,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • springboot中配置好登錄攔截后,swagger訪問不了問題

    springboot中配置好登錄攔截后,swagger訪問不了問題

    這篇文章主要介紹了springboot中配置好登錄攔截后,swagger訪問不了問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java Lambda表達(dá)式詳解

    Java Lambda表達(dá)式詳解

    這篇文章主要介紹了Java Lambda表達(dá)式詳解,包括了Java Lambda表達(dá)式創(chuàng)建線程,Java Lambda表達(dá)式的語法,Java lambda遍歷List集合,Java lambda過濾String需要的朋友可以參考下
    2023-02-02
  • Spring Boot整合elasticsearch的詳細(xì)步驟

    Spring Boot整合elasticsearch的詳細(xì)步驟

    這篇文章主要介紹了Spring Boot整合elasticsearch的詳細(xì)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 詳解Servlet3.0新特性(從注解配置到websocket編程)

    詳解Servlet3.0新特性(從注解配置到websocket編程)

    Servlet3.0的出現(xiàn)是servlet史上最大的變革,其中的許多新特性大大的簡化了web應(yīng)用的開發(fā),為廣大勞苦的程序員減輕了壓力,提高了web開發(fā)的效率。
    2017-04-04
  • Java countDownLatch如何實(shí)現(xiàn)多線程任務(wù)阻塞等待

    Java countDownLatch如何實(shí)現(xiàn)多線程任務(wù)阻塞等待

    這篇文章主要介紹了Java countDownLatch如何實(shí)現(xiàn)多線程任務(wù)阻塞等待,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • logback的addtivity屬性定義源碼解讀

    logback的addtivity屬性定義源碼解讀

    這篇文章主要為大家介紹了logback的addtivity屬性定義源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 淺談Java中Spring Boot的優(yōu)勢(shì)

    淺談Java中Spring Boot的優(yōu)勢(shì)

    在本篇文章中小編給大家分析了Java中Spring Boot的優(yōu)勢(shì)以及相關(guān)知識(shí)點(diǎn)內(nèi)容,興趣的朋友們可以學(xué)習(xí)參考下。
    2018-09-09
  • SpringBoot如何讀取xml配置bean(@ImportResource)

    SpringBoot如何讀取xml配置bean(@ImportResource)

    這篇文章主要介紹了SpringBoot如何讀取xml配置bean(@ImportResource),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java打印日志的幾種方式總結(jié)

    java打印日志的幾種方式總結(jié)

    這篇文章主要介紹了java打印日志的幾種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 淺談springboot多模塊(modules)開發(fā)

    淺談springboot多模塊(modules)開發(fā)

    這篇文章主要介紹了淺談springboot多模塊(modules)開發(fā),詳細(xì)的介紹了springboot多模塊的實(shí)現(xiàn),有興趣的可以了解一下
    2017-09-09

最新評(píng)論

安顺市| 铜山县| 唐河县| 武汉市| 稷山县| 盐城市| 苍溪县| 包头市| 唐海县| 泌阳县| 冀州市| 广河县| 邓州市| 青阳县| 临城县| 大名县| 宜章县| 旌德县| 库车县| 独山县| 寿宁县| 轮台县| 敦化市| 宁河县| 德兴市| 托克托县| 垣曲县| 平远县| 广平县| 无为县| 文山县| 沽源县| 丹阳市| 武陟县| 大新县| 若羌县| 门头沟区| 永丰县| 陇南市| 双辽市| 连江县|