線程轉換狀態,傻傻分不清等待和阻塞嗎?你還在暴力的停止線程嗎?

?線程切換

?線程創建之后,調用start()方法開始運行。當線程執行wait()方法之后,線程進入等待狀態。進入等待狀態的線程需要依靠其他線程的通知才能夠返回到運行狀態,而超時等待狀態相當于在等待狀態的基礎上增加了超時限制,也就是超時時間到達時將會返回到運行狀態。當線程調用同步方法時,在沒有獲取到鎖的情況下,線程將會進入到阻塞狀態。線程在執行Runnable的run()方法之后將會進入到終止狀態。


等待狀態和阻塞狀態的區別、

等待狀態和阻塞狀態都表示線程暫時停止執行,但是它們的原因和發生場景不同。

等待狀態是指一個線程調用了Object類的wait()方法,使得線程進入等待狀態,直到被notfy()或notfyAll()方法喚醒。等待狀態通常是為了實現線程間的協作,等待某個條件的出現后再繼續執行。

阻塞狀態是指一個線程因為某些原因(如等待ⅣO操作完成或試圖獲得一個鎖)而暫停執行,直到滿足特定條件后再繼續執行。阻塞狀態通常是由于外部原因導致的,例如等待用戶輸入、等待網絡傳輸等。

總的來說,等待狀態是由于線程自身的行為導致的,而阻塞狀態是由于外部條件的限制導致的。


處于等待狀態的線程和處于阻塞狀態的線程有區別嗎


注意這里說的是資源


等待狀態的線程通常是在等待某個條件滿足后才能繼續執行,例如等待一個資源被釋放后才能使用。
而阻塞狀態的線程則是被一個外部條件所阻塞,例如等待用戶輸入或等待網絡連接等情況。
等待狀態下,線程會主動釋放所占用的資源,而在阻塞狀態下,線程會一直占用資源直到外部條件滿足才會被喚醒

??????????????????????????????????

線程阻塞狀態和掛起狀態的區別


線程阻塞狀態和掛起狀態的區別在于,線程阻塞狀態是指線程因為等待某個條件而被暫停執行,而掛起狀態是指線程被主動暫停執行,等待被恢復執行。在阻塞狀態下,線程會一直等待條件滿足后才能繼續執行,而在掛起狀態下,線程需要等待外部的恢復操作才能繼續執行。

?

注意

Java將操作系統中的運行和就緒兩個狀態合并稱為運行狀態。阻塞狀態是線程
阻塞在進入synchronized關鍵字修飾的方法或代碼塊(獲取鎖)時的狀態,
但是阻塞在
java.concurrent包中Lock接口的線程狀態卻是等待狀態,因為java.concurrent包中Lock接口對于
阻塞的實現均使用了LockSupport類中的相關方法。


中斷v

中斷可以理解為線程的一個標識位屬性它表示一個運行中的線程是否被其他線程進行
了中斷操作。中斷好比其他線程對該線程打了個招呼,其他線程通過調用該線程的interrupt()
方法對其進行中斷操作。

線程通過檢查自身是否被中斷來進行響應,線程通過方法isInterrupted()來進行判斷是否
被中斷,也可以調用靜態方法Thread.interrupted()對當前線程的中斷標識位進行復位。如果該
線程已經處于終結狀態,即使該線程被中斷過,在調用該線程對象的isInterrupted()時依舊會返
回false。

從Java的API中可以看到,許多聲明拋出InterruptedException的方法(例如Thread.sleep(long
millis)方法)這些方法在拋出InterruptedException之前,Java虛擬機會先將該線程的中斷標識位清除,然后拋出InterruptedException,此時調用isInterrupted()方法將會返回false。


安全的去停止線程

中斷狀態是線程的一個標識位,而中斷操作是一種簡便的線程間交互方式,而這種交互方式最適合用來取消或停止任務。除了中斷以外,還可以利用一個boolean變量來控制是否需要停止任務并終止該線程.

示例在執行過程中,main線程通過中斷操作和cancel()方法均可使CountThread得以終止。
這種通過標識位或者中斷操作的方式能夠使線程在終止時有機會去清理資源,而不是武斷地
將線程停止,因此這種終止線程的做法顯得更加安全和優雅。

stop為什么不安全

stop方法:強制停止一個正在運行的線程,無論此時線程是何種狀態。
stop方法在停止線程時需要自行指定線程退出邏輯,否則線程會立即退出,不做任何清理操作,非常不安全,會造成數據不一致問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35319.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35319.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35319.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

騰訊云服務器競價實例是什么?適用于什么行業?有啥優惠?

騰訊云服務器CVM計費模式分為包年包月、按量計費和競價實例,什么是競價實例?競價實例和按量付費相類似,優勢是價格更劃算,缺點是云服務器實例有被自動釋放風險,騰訊云服務器網來詳細說下什么是競價實例?以及…

GUI、多線程編程、網絡編程簡介

GUI、多線程編程、網絡編程簡介 文章目錄 GUI簡介什么是GUIGUI有什么用使用方法 多線程編程什么是多線程編程多線程編程有什么用提高程序的響應能力提高程序的性能實現異步編程并發數據訪問和共享資源實現復雜的算法和任務分解 進行多線程編程的步驟 網絡編程什么是網絡編程網絡…

JMeter處理接口簽名之BeanShell實現MD5加密

項目A需要給項目B提供一個接口,這個接口加密了,現在需要測試這個接口,需要怎么編寫腳本呢?實現接口簽名的方式有兩種:BeanShell實現MD5加密和函數助手實現MD5加密,之前已經分享過了函數助手實現MD5加密&…

React如何配置env環境變量

React版本: "react": "^18.2.0" 1、在package.json平級目錄下創建.env文件 2、在‘.env’文件里配置環境變量 【1】PUBLIC_URL 描述:編譯時文件的base-href 官方描述: // We use PUBLIC_URL environment variable …

從KM到Cure Models:常用生存分析方法的優缺點

一、引言 生存分析是一種用于研究個體生命長度或事件發生時間的統計方法。在許多領域中,如醫學、社會學、經濟學和工程學等,生存分析被廣泛應用于分析個體的生存時間,并研究相關因素對生存時間的影響。通過生存分析,我們可以評估特…

交換排序——選擇排序和冒泡排序的區別是什么?

今天重溫一下算法,其實剛開始我覺得冒泡排序和選擇排序是一樣的,因為他們排序過程中都是通過相鄰的數據比較找到最小/最大的數據,通過不斷思考和學習才明白,兩者還是有區別的。 冒泡排序 概念 冒泡排序(Bubble Sort)&#xff0…

SpringBoot使用thymeleaf模版引擎配置自定義錯誤頁面

1、要在Spring Boot項目中配置自定義的錯誤頁面&#xff0c;你可以遵循以下步驟&#xff1a; 1.1、pom.xml引入thymeleaf <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><…

【正版系統】2023熱門短劇SAAS版開源 | 小程序+APP+公眾號H5

當我們在刷百度、D音、K手等各種新聞或短視頻時經常會刷到劇情很有吸引力的短劇廣告&#xff0c;我們點擊廣告鏈接即可進入短劇小程序&#xff0c;小程序運營者通過先免費看幾集為誘耳然后在情節高潮時彈出充值或開VIP會員才能繼續看的模式來賺錢&#xff0c;以超級贅婿、鄉村小…

VS Code中C++程序的調試(Debug)功能

有一個.vscode文件&#xff0c;存放當前工作區相關配置文件的目錄。 launch.json {"version": "0.2.0","configurations": [{"name": "gcc.exe - 生成和調試活動文件", // 該調試任務的名字&#xff0c;啟動調試時會在待…

TCP/IP 下的計算機網絡江湖

〇、引言 在當今數字化時代,計算機網絡宛如廣袤江湖,涵蓋著五大門派:物理層、數據鏈路層、網絡層、傳輸層和應用層。每個門派獨具技能,共同構筑著現代網絡的框架。物理層宛如江湖基石,將比特流傳輸;數據鏈路層如武林傳承,組織數據幀傳遞;網絡層則像導航大師,尋找傳送路…

使用阿里云服務器搭建PostgreSQL主從架構圖文流程

阿里云百科分享使用阿里云服務器搭建PostgreSQL主從架構圖文流程&#xff0c;PostgreSQL被業界譽為最先進的開源數據庫&#xff0c;支持NoSQL數據類型&#xff08;JSON/XML/hstore&#xff09;。本文檔介紹在CentOS 7操作系統的ECS實例上搭建PostgreSQL主從架構的操作步驟。 目…

【Linux操作系統】文件描述符fd

&#x1f525;&#x1f525; 歡迎來到小林的博客&#xff01;&#xff01; ??????&#x1f6f0;?博客主頁&#xff1a;??林 子 ??????&#x1f6f0;?博客專欄&#xff1a;?? Linux之路 ??????&#x1f6f0;?社區 :?? 進步學堂 ??????&#x1…

python單元測試框架(測試固件、批量執行)

python測試框架 在Python語言中應用最廣泛的單元測試框架是unittest和pytest,unittest屬于標準庫&#xff0c;只要安裝了Python解釋器后就可以直接導入使用了,pytest是第三方的庫&#xff0c;需要單獨的安裝。 1.白盒測試原理 在軟件架構的層面來說&#xff0c;測試最核心的…

Kotlin入門:變量和函數——02

目錄 一、Kotlin 基本數據類型 ?編輯 二、變量 val 關鍵字&#xff1a; var 關鍵字: 類型推斷: 可空類型: 三、函數 基本函數語法&#xff1a; 單表達式函數&#xff1a; 默認參數值&#xff1a; 命名參數&#xff1a; 一、Kotlin 基本數據類型 Kotlin 的基本數…

vue數據更新table內容不更新解決方法

場景&#xff1a; table組件綁定的數據變化時&#xff0c;頁面沒有重新渲染&#xff0c;常見于子組件中使用table組件 原理&#xff1a; 創建實例時 數組在vue中沒有被監聽到&#xff0c;屬于非響應式數據&#xff0c;數組的下標變化無法監聽到 解決方式&#xff1a; <e…

SpringSecurity如何放行資源

SpringSecurity配置放行資源 permitAll配置實例 EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter {Overridepublic void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/css/**", …

數據庫事務ACID介紹

一、ACID簡介 ACID&#xff0c;是指數據庫管理系統&#xff08;DBMS&#xff09;在增刪改數據的的過程中&#xff0c;為保證事務&#xff08;transaction&#xff09;的準確性&#xff0c;可靠性等&#xff0c;所必須具備的四個特性&#xff1a;原子性&#xff08;atomicity&a…

【MFC】09.MFC視圖-筆記

MFC視圖窗口&#xff1a;CView類 顯示數據/畫面 我們之前的繪圖消息&#xff0c;都是在框架類上畫出來的 視圖窗口就覆蓋在框架窗口上 視圖窗口本質上也是窗口&#xff0c;只是和框架窗口風格不同 CView類也繼承于CWnd類 CView也能處理消息&#xff0c;因為它繼承于CWnd類…

關于selenium 元素定位的淺度解析

一、By類單一屬性定位 元素名稱 描述 Webdriver API id id屬性 driver.find_element(By.ID, "id屬性值") name name屬性 driver.find_element(By.NAME, "name屬性值") class_name class屬性 driver.find_element(By.CLASS_NAME, "class_na…

25考研:跨專業考研難嗎?

25考研&#xff1a;跨專業考研難嗎&#xff1f; 嘉興校址&#xff1a;嘉興市南湖區中山東路205號嘉華廣場4樓 &#xff08;建國珠寶城旁&#xff09;上元教育 海寧校址&#xff1a;海寧市西山路832號金貿大廈11樓1101號上元教育 桐鄉校址&#xff1a;桐鄉市東悅路吾悅廣場156號…