成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們?cè)撊绾握_的中斷一個(gè)正在執(zhí)行的線(xiàn)程??

網(wǎng)絡(luò) 通信技術(shù)
作者個(gè)人研發(fā)的在高并發(fā)場(chǎng)景下,提供的簡(jiǎn)單、穩(wěn)定、可擴(kuò)展的延遲消息隊(duì)列框架,具有精準(zhǔn)的定時(shí)任務(wù)和延遲隊(duì)列處理功能。

[[358852]]

作者個(gè)人研發(fā)的在高并發(fā)場(chǎng)景下,提供的簡(jiǎn)單、穩(wěn)定、可擴(kuò)展的延遲消息隊(duì)列框架,具有精準(zhǔn)的定時(shí)任務(wù)和延遲隊(duì)列處理功能。自開(kāi)源半年多以來(lái),已成功為十幾家中小型企業(yè)提供了精準(zhǔn)定時(shí)調(diào)度方案,經(jīng)受住了生產(chǎn)環(huán)境的考驗(yàn)。為使更多童鞋受益,現(xiàn)給出開(kāi)源框架地址:https://github.com/sunshinelyz/mykit-delay

 寫(xiě)在前面

當(dāng)我們?cè)谡{(diào)用Java對(duì)象的wait()方法或者線(xiàn)程的sleep()方法時(shí),需要捕獲并處理InterruptedException異常。如果我們對(duì)InterruptedException異常處理不當(dāng),則會(huì)發(fā)生我們意想不到的后果!今天,我們就以一個(gè)案例的形式,來(lái)為大家詳細(xì)介紹下為何中斷執(zhí)行的線(xiàn)程不起作用。

程序案例

例如,下面的程序代碼,InterruptedTask類(lèi)實(shí)現(xiàn)了Runnable接口,在run()方法中,獲取當(dāng)前線(xiàn)程的句柄,并在while(true)循環(huán)中,通過(guò)isInterrupted()方法來(lái)檢測(cè)當(dāng)前線(xiàn)程是否被中斷,如果當(dāng)前線(xiàn)程被中斷就退出while(true)循環(huán),同時(shí),在while(true)循環(huán)中,還有一行Thread.sleep(100)代碼,并捕獲了InterruptedException異常。整個(gè)代碼如下所示。

  1. package io.binghe.concurrent.lab08; 
  2.  
  3. /** 
  4.  * @author binghe 
  5.  * @version 1.0.0 
  6.  * @description 線(xiàn)程測(cè)試中斷 
  7.  */ 
  8. public class InterruptedTask implements Runnable{ 
  9.  
  10.     @Override 
  11.     public void run() { 
  12.  
  13.         Thread currentThread = Thread.currentThread(); 
  14.         while (true){ 
  15.             if(currentThread.isInterrupted()){ 
  16.                 break; 
  17.             } 
  18.  
  19.             try { 
  20.                 Thread.sleep(100); 
  21.             } catch (InterruptedException e) { 
  22.                 e.printStackTrace(); 
  23.             } 
  24.         } 
  25.     } 

上述代碼的本意是通過(guò)isInterrupted()方法檢查線(xiàn)程是否被中斷了,如果中斷了就退出while循環(huán)。其他線(xiàn)程通過(guò)調(diào)用執(zhí)行線(xiàn)程的interrupt()方法來(lái)中斷執(zhí)行線(xiàn)程,此時(shí)會(huì)設(shè)置執(zhí)行線(xiàn)程的中斷標(biāo)志位,從而使currentThread.isInterrupted()返回true,這樣就能夠退出while循環(huán)。

這看上去沒(méi)啥問(wèn)題啊!但真的是這樣嗎?我們創(chuàng)建一個(gè)InterruptedTest類(lèi)用于測(cè)試,代碼如下所示。

  1. package io.binghe.concurrent.lab08; 
  2.  
  3. /** 
  4.  * @author binghe 
  5.  * @version 1.0.0 
  6.  * @description 測(cè)試線(xiàn)程中斷 
  7.  */ 
  8. public class InterruptedTest { 
  9.     public static void main(String[] args){ 
  10.         InterruptedTask interruptedTask = new InterruptedTask(); 
  11.         Thread interruptedThread = new Thread(interruptedTask); 
  12.         interruptedThread.start(); 
  13.         try { 
  14.             Thread.sleep(1000); 
  15.         } catch (InterruptedException e) { 
  16.             e.printStackTrace(); 
  17.         } 
  18.         interruptedThread.interrupt(); 
  19.     } 

我們運(yùn)行main方法,如下所示。

這竟然跟我們想象的不一樣!不一樣!不一樣!這是為什么呢?

問(wèn)題分析

上述代碼明明調(diào)用了線(xiàn)程的interrupt()方法來(lái)中斷線(xiàn)程,但是卻并沒(méi)有起到啥作用。原因是線(xiàn)程的run()方法在執(zhí)行的時(shí)候,大部分時(shí)間都是阻塞在sleep(100)上,當(dāng)其他線(xiàn)程通過(guò)調(diào)用執(zhí)行線(xiàn)程的interrupt()方法來(lái)中斷執(zhí)行線(xiàn)程時(shí),大概率的會(huì)觸發(fā)InterruptedException異常,在觸發(fā)InterruptedException異常的同時(shí),JVM會(huì)同時(shí)把線(xiàn)程的中斷標(biāo)志位清除,所以,這個(gè)時(shí)候在run()方法中判斷的currentThread.isInterrupted()會(huì)返回false,也就不會(huì)退出當(dāng)前while循環(huán)了。

既然問(wèn)題分析清楚了,那如何中斷線(xiàn)程并退出程序呢?

問(wèn)題解決

正確的處理方式應(yīng)該是在InterruptedTask類(lèi)中的run()方法中的while(true)循環(huán)中捕獲異常之后重新設(shè)置中斷標(biāo)志位,所以,正確的InterruptedTask類(lèi)的代碼如下所示。

  1. package io.binghe.concurrent.lab08; 
  2.  
  3. /** 
  4.  * @author binghe 
  5.  * @version 1.0.0 
  6.  * @description 中斷線(xiàn)程測(cè)試 
  7.  */ 
  8. public class InterruptedTask implements Runnable{ 
  9.  
  10.     @Override 
  11.     public void run() { 
  12.  
  13.         Thread currentThread = Thread.currentThread(); 
  14.         while (true){ 
  15.             if(currentThread.isInterrupted()){ 
  16.                 break; 
  17.             } 
  18.  
  19.             try { 
  20.                 Thread.sleep(100); 
  21.             } catch (InterruptedException e) { 
  22.                 e.printStackTrace(); 
  23.                 currentThread.interrupt(); 
  24.             } 
  25.         } 
  26.     } 

可以看到,我們?cè)诓东@InterruptedException異常的catch代碼塊中新增了一行代碼。

  1. currentThread.interrupt(); 

這就使得我們捕獲到InterruptedException異常后,能夠重新設(shè)置線(xiàn)程的中斷標(biāo)志位,從而中斷當(dāng)前執(zhí)行的線(xiàn)程。

我們?cè)俅芜\(yùn)行InterruptedTest類(lèi)的main方法,如下所示。

總結(jié)

處理InterruptedException異常時(shí)要小心,如果在調(diào)用執(zhí)行線(xiàn)程的interrupt()方法中斷執(zhí)行線(xiàn)程時(shí),拋出了InterruptedException異常,則在觸發(fā)InterruptedException異常的同時(shí),JVM會(huì)同時(shí)把執(zhí)行線(xiàn)程的中斷標(biāo)志位清除,此時(shí)調(diào)用執(zhí)行線(xiàn)程的isInterrupted()方法時(shí),會(huì)返回false。此時(shí),正確的處理方式是在執(zhí)行線(xiàn)程的run()方法中捕獲到InterruptedException異常,并重新設(shè)置中斷標(biāo)志位(也就是在捕獲InterruptedException異常的catch代碼塊中,重新調(diào)用當(dāng)前線(xiàn)程的interrupt()方法)。

本文轉(zhuǎn)載自微信公眾號(hào)「冰河技術(shù)」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系冰河技術(shù)公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 冰河技術(shù)
相關(guān)推薦

2018-06-28 08:41:37

2020-06-01 11:01:28

智慧城市物聯(lián)網(wǎng)技術(shù)

2014-07-02 10:03:42

App推廣渠道

2016-09-30 09:49:05

2021-11-03 12:34:41

黑客網(wǎng)絡(luò)釣魚(yú)攻擊

2020-06-20 14:15:53

信息安全數(shù)據(jù)技術(shù)

2024-11-21 08:31:07

耗資源神秘進(jìn)程

2018-03-07 11:00:27

2025-01-26 09:35:45

2021-10-27 06:49:34

線(xiàn)程池Core函數(shù)

2010-09-09 21:34:06

2021-11-15 10:35:46

Python線(xiàn)程代碼

2022-03-09 09:43:01

工具類(lèi)線(xiàn)程項(xiàng)目

2024-03-25 12:30:05

AI模型

2023-02-01 16:36:31

GNOMEChatGPTLinux

2010-04-01 09:18:38

云計(jì)算

2021-04-29 15:55:51

編程IT程序員

2014-08-07 10:52:18

GitHub代碼托管

2014-11-28 09:45:35

程序員

2021-02-03 10:34:35

多云云安全CISO
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91亚洲国产亚洲国产 | 亚洲不卡在线视频 | 国产精品爱久久久久久久 | 精品久久香蕉国产线看观看亚洲 | 久久精品国产一区 | 国产一区二区三区四区五区加勒比 | 国产精品免费在线 | 精品中文字幕一区二区 | 亚洲第一视频网站 | 日韩伦理一区二区三区 | 九九热在线视频观看这里只有精品 | 久久亚 | 欧美精品福利 | 欧美极品在线播放 | 成人3d动漫一区二区三区91 | 午夜国产精品视频 | 91xxx在线观看| 福利av在线 | 日韩不卡一区二区 | 国产精品亚洲成在人线 | 毛片a级 | www.中文字幕.com | 久久国内精品 | 99视频在线免费观看 | 亚洲高清免费观看 | 日韩欧美国产电影 | 色综久久| 国产精品视频播放 | 天天干免费视频 | 久久乐国产精品 | 一区二区视频 | 国产欧美一区二区三区另类精品 | 久久久激情 | 九九九色| 91视频精选 | 欧美成年黄网站色视频 | 一区二区中文字幕 | 成年人在线观看视频 | 国产乱人伦 | 久久久www成人免费精品 | 特级丰满少妇一级aaaa爱毛片 |