国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

擼一擼如何優雅地中止線程?

開發 后端
本文來學習如何學習優雅地中止線程?通過 Java 線程的生老病死的學習,我相信大家對線程的運行以及線程的狀態有一定了解了,那么我們現在來學習中止線程:

 [[320148]]

本文來學習如何學習優雅地中止線程?通過 Java 線程的生老病死的學習,我相信大家對線程的運行以及線程的狀態有一定了解了,那么我們現在來學習中止線程:

錯誤的線程中止 - stop

首先來講解一個錯誤的方式來中止線程 — stop:中止線程,并且清除監控器鎖的信息,但是可能導致線程安全問題,JDK 不建議使用,類似的方法還有 destory,由于 JDK 從未實現該方法,在這里就不介紹了。

接下來通過一段程序來講解為什么 stop 會導致線程安全問題?

首先定義一個線程類 StopThread: 

  1. public class StopThread extends Thread { 
  2.     private int i = 0; 
  3.     private int j = 0; 
  4.  
  5.     @Override 
  6.     public void run() { 
  7.         synchronized (this) { 
  8.             // 增加同步鎖,確保線程安全 
  9.             ++i; 
  10.             try { 
  11.                 // 休眠10秒,模擬耗時操作 
  12.                 Thread.sleep(10000); 
  13.             } catch (InterruptedException e) { 
  14.                 e.printStackTrace(); 
  15.             } 
  16.             ++j; 
  17.         } 
  18.     } 
  19.  
  20.     /** 
  21.      * 打印 i 和 j 
  22.      */ 
  23.     public void print() { 
  24.         System.out.println("i=" + i + " j=" + j); 
  25.     } 

這個線程做的事情就是在同步代碼塊中對 i 和 j 這兩個變量進行自增操作,但是在這個執行過程中會進行 10 秒的睡眠,如果在這個過程中,如果用 stop 方法將線程中止的話,會導致 i 和 j 數據不正確,也可以說程序設計上的線程安全問題,因為主線程影響到了創建的 StopThread 線程的數據不正確性,理想的正確輸出結果應該是要么全部添加成功,要么都失敗,因為我們添加鎖的目的就是保證操作原子性或者說想讓這兩個變量在操作的時候不受其他線程干擾。

下面編寫 StopThreadDemo 類,來使用 stop 方法做個錯誤示范: 

  1. public class StopThreadDemo { 
  2.     public static void main(String[] args) throws InterruptedException { 
  3.         StopThread thread = new StopThread(); 
  4.         thread.start(); 
  5.         // 休眠 1 秒,確保 i 變量自增成功 
  6.         Thread.sleep(1000); 
  7.         // 暫停線程 
  8.         thread.stop(); // 錯誤的終止 
  9.         while (thread.isAlive()) { 
  10.             // 確保線程已經終止 
  11.         } // 輸出結果 
  12.         thread.print(); 
  13.     } 

在 StopThreadDemo 類中,創建并啟動了 StopThread 線程,這個線程就是下執行變量i 和 j 的自增操作,但是這個自增操作是用同步關鍵字包裹的同步代碼塊,這樣做是為了讓兩個變量的自增操作實現原子性,不會受到其他線程的干擾,確保線程的安全。

但是在線程休眠的 10 秒內,通過 stop 方法把線程中止掉,會發現輸出結果為 i=1 j=0,也就是代碼的前半段 i 自增實現,但是后半段 j 的自增失敗,會使線程中的數據出現不一致性,從而同步代碼塊的保證的原子性的目標沒有達成,破壞了線程安全。

正確的線程中止 - interrupt

在介紹了錯誤的中止方式后,讓我們來學習正確的線程中止 - interrupt :

如果目標線程在調用 Object class 的 wait() 、wait(long) 或 wait(long,int) 方法、join()、join(long,int) 或 sleep(long,int) 方法時阻塞,那么 interrupt 會生效,該線程的中斷狀態將被清除,拋出 InterruptedException 異常。

如果目標線程是被 IO 或者 NIO 中的 Channel 所阻塞,同樣 IO 操作會被中斷返回特殊異常值,達到中止線程的目的。

如果以上條件都不滿足,則會設置此線程的中斷狀態。

接下來將 StopThreadDemo 中的 stop 改為 interrupt 來看下運行結果是什么: 

  1. java.lang.InterruptedException: sleep interrupted 
  2.   at java.lang.Thread.sleep(Native Method) 
  3.   at com.wupx.thread.StopThread.run(StopThread.java:18) 
  4. i=1 j=1 

可以發現兩個變量的自增可以正常執行,保證了執行的數據一致性,interrupt 不會強制中止,將線程直接中斷,而是拋出異常通知我們,開發者就可以控制收到異常后的執行邏輯,讓整個程序處于線程安全的狀態,這是目前 JDK 版本中推薦的 interrupt 方法。

除了 interrupt 的正確方法外,還可以通過標志位的形式來中止線程:

正確的線程中止 - 標志位如果代碼程序邏輯中是循環執行的業務,可以在程序的執行中線程代碼中增加一個標志位,比如下面代碼中在 while 循環中去執行這個程序,通過 flag 去控制程序是否繼續執行,如果在外部線程將 flag 修改為 false,那么創建的子線程代碼中會收到這個數據的變化,通過這個變量的形式,通知到另一個線程,從而達到控制線程中止的效果。 

  1. java.lang.InterruptedException: sleep interrupted 
  2.   at java.lang.Thread.sleep(Native Method) 
  3.   at com.wupx.thread.StopThread.run(StopThread.java:18) 
  4. i=1 j=1 

通過運行代碼,得到的結果如下: 

  1. 運行中 
  2. 運行中 
  3. 運行中 
  4. 程序運行結束 

這種方式受限于線程中所執行的業務邏輯,如果程序中是有可以用來做標志位的條件的話可以用這種方式來做,也是一種正確的線程中止方式。

總結

本文主要學習了線程中止的三種方式:stop、interrupt 以及標志位,大家學會了嗎,歡迎留言討論。

 

責任編輯:武曉燕 來源: 武培軒
相關推薦

2025-06-24 08:25:00

Java并發編程線程

2020-11-12 07:51:05

DockerSpring Boot應用

2018-04-12 17:00:07

云計算燒烤SaaS

2022-09-28 12:23:36

Promise代碼

2021-10-27 06:49:34

線程池Core函數

2023-01-10 19:47:47

Redis原理多線程

2021-10-12 09:24:02

Java線程池源碼

2017-02-20 13:54:04

戴爾

2022-03-01 11:38:51

RPC框架后端

2015-06-12 10:01:25

程序員代碼

2017-07-14 14:12:10

AndroidRecyclerVie

2020-11-04 07:56:19

工具Linux 翻譯

2021-06-07 12:08:06

iOS Python API

2021-12-12 18:18:15

代碼元宇宙Python

2020-08-03 08:10:52

UDPTCP通信

2021-05-14 13:30:17

Mybatis分表插件

2024-02-19 00:00:00

Redis分布式

2021-11-02 22:35:46

配置DubboLoadbalance

2020-09-10 06:58:34

C語言DBProxy

2021-11-02 14:19:15

插件MavengroupId
點贊
收藏

51CTO技術棧公眾號

老司机一区二区三区| www.日韩精品| 中文字幕少妇一区二区三区| 日本在线视频www| 99在线观看免费视频精品观看| 久久精品视频导航| 国产精品秘入口| 国产麻豆视频精品| 91偷拍精品一区二区三区| 精品视频在线播放一区二区三区| 精品婷婷伊人一区三区三| 国产a级片免费观看| 热久久久久久久| 91色视频在线导航| 久久久精品国产**网站| 宅男66日本亚洲欧美视频| 巨大荫蒂视频欧美大片| 一区二区三区毛片| www国产黄色| 国产高清在线精品| 欧美日韩亚洲在线| 亚洲小说区图片区| 91精品国产综合久久久久久蜜臀| 国产suv精品一区| 色偷偷亚洲男人天堂| 日本性爱视频在线观看| 欧美日韩一区二区电影| 欧美性孕妇孕交| 亚洲高清免费观看| 日本在线аv| 亚洲三级电影网站| 国产无遮挡又黄又爽免费软件 | 亚洲色图插插| 91精品国产高清| 欧美日韩伦理一区二区| 日韩精品免费在线视频观看| av网站导航在线观看免费| 在线视频国内一区二区| 手机福利在线| 欧美在线观看视频在线| 第一视频专区在线| 欧美人与性动xxxx| 欧美极品另类| 精品国产露脸精彩对白| 2020国产在线| 亚洲欧美国产日韩天堂区| 国产高清视频色在线www| 精品成人a区在线观看| caoprom在线| 亚洲男人天天操| 欧美日韩国产网站| 蜜臀久久99精品久久久久久宅男| 麻豆国产精品| 午夜美女久久久久爽久久| 偷拍精品福利视频导航| 国产精品美女久久久久久免费 | 美女在线一区二区| 日韩欧美视频一区二区| 美日韩一区二区| 8x8ⅹ国产精品一区二区二区| 国产精品一品视频| 国产精品亚洲二区在线观看| 国产日本亚洲高清| 成人在线看片网站| 色狠狠桃花综合| 在线观看wwwxxxx| 亚洲欧洲在线视频| 成人在线视频国产| 欧美综合一区第一页| 在线观看日韩| 中文字幕一区二区三区四区五区六区| 成人午夜伦理影院| 久草.com| 欧美精品久久99久久在免费线| 55av亚洲| 97久久超碰福利国产精品…| 日韩综合网站| 日产精品久久久一区二区| 国产在线视频一区二区三区| 亚洲精品无码久久久久久| 亚洲综合在线视频| 成人在线网址| 久久久999成人| 日韩精品2区| 中文字幕久久综合| 一区在线中文字幕| 免费a级人成a大片在线观看| 国产亚洲免费的视频看| 国产成人黄色| 婷婷四月色综合| 国产精品国产三级国产aⅴ无密码| 可以在线观看的av网站| 精品国产一区二区三区不卡| 亚洲综合在线五月| 国产精品99免费看| 精品久久久久久久无码| 亚洲激情小视频| 久久综合五月婷婷| 国产国语刺激对白av不卡| 亚洲精品在线二区| 国产精品久久久久9999爆乳| 一色桃子久久精品亚洲| 性开放的欧美大片| 久久99精品久久久久久琪琪| 国产主播一区| 日韩网址在线观看| 欧美日韩免费视频| 中文在线综合| 欧洲国产精品| 亚洲欧美日韩国产综合| 欧美午夜大胆人体| 日本成熟性欧美| 国产另类ts人妖一区二区| 青青国产在线| 日韩最新在线视频| av成人天堂| 激情四房婷婷| 在线视频欧美性高潮| 在线精品在线| 成人短剧在线观看| 中文字幕欧美在线| 久久久xxx| 日本v片在线免费观看| 欧美大肥婆大肥bbbbb| 天堂午夜影视日韩欧美一区二区| 老司机aⅴ毛片免费观看| 亚洲色图激情小说| 性欧美xxxx大乳国产app| av网站观看| 久青草国产97香蕉在线视频| 久久男女视频| 成人精品福利| 91免费精品国偷自产在线| 欧美韩日一区二区三区| 91久久国产综合久久91猫猫| 国产日韩亚洲精品| 亚洲成a天堂v人片| 天天久久夜夜| 成人一级片网站| 亚洲欧美日韩精品久久亚洲区| 亚洲影音一区| 嫩草研究院在线| 日本精品视频在线| 欧美国产成人在线| 国产精品亚洲综合在线观看 | www.亚洲视频.com| 日韩欧美中文一区| 在线精品视频在线观看高清| 99热在线观看| 欧美成在线视频| 成人国产精品视频| 欧美男体视频| 老司机午夜网站| 日韩精品一区二区三区四区视频| 亚洲香蕉网站| 国产成人天天5g影院在线观看| 国产日韩精品一区二区| 亚洲一区二区精品视频| 欧美亚洲tv| eeuss在线播放| 日韩免费观看视频| 一区二区三区日本| 欧美美乳视频| 在线午夜视频| 成人黄色在线观看| 欧美性高跟鞋xxxxhd| 婷婷中文字幕一区| 国产在线视频网| 久久精品国产99精品国产亚洲性色| 91福利在线观看| 136国产福利精品导航网址| 淫片在线观看| 午夜精品一区二区三区四区| 精品久久久久久亚洲综合网| 蜜乳av一区二区三区| 大胆人体一区| 黄色片久久久久| 韩剧1988在线观看免费完整版| 中文字幕一区二区三区乱码在线 | 国产乱子轮精品视频| 波多野一区二区| 成人午夜免费剧场| 操日韩av在线电影| 18欧美亚洲精品| 国产精品成人a在线观看| av片在线看| 伊人久久大香线蕉成人综合网| 国产视频久久久久| 91在线小视频| 欧美一级二级三级视频| 色视频www在线播放| 国产一级精品aaaaa看| 538在线一区二区精品国产| 麻豆91精品91久久久的内涵| 成人精品高清在线视频| 91极品尤物在线播放国产| 成人福利网站在线观看11| 欧美一二三在线| 92精品国产成人观看免费| 神马影视一区二区|