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

Java ExcutorService優(yōu)雅關(guān)閉方式解析

 更新時(shí)間:2020年05月30日 10:01:41   作者:migoo  
這篇文章主要介紹了Java ExcutorService優(yōu)雅關(guān)閉方式解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

關(guān)閉時(shí)可使用如下代碼

public static void waitUntilTerminate(final ExecutorService executorService, final int timeout) {
    try {
      executorService.shutdown();
      if (!executorService.awaitTermination(timeout, TimeUnit.SECONDS)) { //超時(shí)后直接關(guān)閉
        executorService.shutdownNow();
      }
    } catch (InterruptedException e) { //awaitTermination 出現(xiàn)中斷異常也將觸發(fā)關(guān)閉
      executorService.shutdownNow();
    }
  }

但是實(shí)際使用中,可能會(huì)出現(xiàn)即使使用了shutdownNow方法,還是無(wú)法終止線(xiàn)程的問(wèn)題,那是因?yàn)槟愕木€(xiàn)程無(wú)法被中斷

shutdownNow方法簡(jiǎn)單理解就是給在運(yùn)行的線(xiàn)程發(fā)一個(gè)中斷信號(hào),如果你的線(xiàn)程忽略這個(gè)信號(hào),那就無(wú)法停下來(lái)

舉個(gè)例子來(lái)說(shuō)明這個(gè)問(wèn)題

public class ShutDownUtilsTest {

  private ExecutorService executorService;

  @Before
  public void init() {
    executorService = Executors.newFixedThreadPool(1);
  }

  @Test
  public void shutDownOKTest() {
    ShutDownUtils.waitUntilTerminate(executorService, 1);

    CommonUtils.sleep(1); //等待線(xiàn)程處理中斷
    Assert.assertTrue(executorService.isTerminated());
  }

  @Test
  public void shutDownNowFailTest() {
    executorService.execute(this::canNotStopThread);
    ShutDownUtils.waitUntilTerminate(executorService, 0);

    CommonUtils.sleep(1); //等待線(xiàn)程處理中斷
    Assert.assertFalse(executorService.isTerminated());
  }

  @Test
  public void shutDownNowOKTest() {
    executorService.execute(this::stopThread);
    ShutDownUtils.waitUntilTerminate(executorService, 0);

    CommonUtils.sleep(1); //等待線(xiàn)程處理中斷
    Assert.assertTrue(executorService.isTerminated());
  }

  private void canNotStopThread() {
    for (long i = 0; i < Long.MAX_VALUE; i++) {
    }
  }

  private void stopThread() {
    for (long i = 0; i < Long.MAX_VALUE && !Thread.currentThread().isInterrupted(); i++) {
    }
  }
}

從上面的測(cè)試用例可以看到canNotStopThread無(wú)法被shutDownNow終止

然而stopThread可以被正常終止,因?yàn)橥ㄟ^(guò)Thread.currentThread().isInterrupted()在判斷線(xiàn)程是否收到了中斷信號(hào)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

江陵县| 常熟市| 阳西县| 偏关县| 彭水| 阿拉善右旗| 玉屏| 和田县| 陇西县| 哈密市| 中西区| 阳泉市| 辛集市| 平谷区| 台湾省| 上蔡县| 海安县| 岐山县| 建始县| 建德市| 健康| 合作市| 武鸣县| 胶南市| 调兵山市| 海淀区| 延长县| 新郑市| 桦川县| 会宁县| 巴塘县| 宿迁市| 余庆县| 明水县| 湛江市| 赣榆县| 蕲春县| 泽库县| 海兴县| 湖州市| 阳谷县|