基于java 線程的幾種狀態(tài)(詳解)
線程可以有六種狀態(tài):
1.New(新創(chuàng)建)
2.Runnable(可運(yùn)行)(運(yùn)行)
3.Blocked(被阻塞)
4.Waiting(等待)
5.Timed waiting(計(jì)時(shí)等待)
6.Terminated(被終止)
新創(chuàng)建線程:
當(dāng)用new操作符創(chuàng)建一個(gè)新線程時(shí),如new Thread(r),該線程還沒有開始運(yùn)行,它的當(dāng)前狀態(tài)為new,在線程運(yùn)行之前還有一些基礎(chǔ)工作要做。
可運(yùn)行線程:
一旦線程調(diào)用start方法,線程處于runnable狀態(tài)。在這個(gè)狀態(tài)下的線程可能正在運(yùn)行也可能沒有運(yùn)行(也就是說Java規(guī)范中正在運(yùn)行的線程仍然處于可運(yùn)行狀態(tài))。在線程運(yùn)行之后或者從阻塞、等待或睡眠狀態(tài)回來后,也返回到可運(yùn)行狀態(tài)。
被阻塞線程:
這個(gè)狀態(tài)下, 是在多個(gè)線程有同步操作的場景, 比如正在等待另一個(gè)線程的synchronized 塊的執(zhí)行釋放, 或者可重入的 synchronized塊里別人調(diào)用wait() 方法, 也就是線程在等待進(jìn)入臨界區(qū)。
等待線程:
這個(gè)狀態(tài)下是指線程擁有了某個(gè)鎖之后, 調(diào)用了它的wait方法,或者線程調(diào)用了join方法 join了另外的線程, 等待被他join的線程執(zhí)行結(jié)束的狀態(tài)。這里要區(qū)分阻塞狀態(tài) 和等待狀態(tài)的區(qū)別, 一個(gè)是在臨界點(diǎn)外面等待進(jìn)入, 一個(gè)是在臨界點(diǎn)里面wait。
計(jì)時(shí)等待線程:
當(dāng)線程調(diào)用帶有超時(shí)參數(shù)的方法時(shí)會(huì)導(dǎo)致線程進(jìn)入計(jì)時(shí)等待狀態(tài),帶有超市參數(shù)的方法有Thread.sleep、Object.wait、Thread.join、Lock.tryLock以及Condition.await的計(jì)時(shí)版。
被終止的線程:
1)線程因?yàn)閞un方法正常退出而自然死亡。
2)因?yàn)橐粋€(gè)沒有捕獲的異常終止了run方法而意外死亡。
線程狀態(tài)之間的轉(zhuǎn)換:
以上這篇基于java 線程的幾種狀態(tài)(詳解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- RxJava的消息發(fā)送和線程切換實(shí)現(xiàn)原理
- Java 實(shí)現(xiàn)多線程切換等待喚醒交替打印奇偶數(shù)
- Java線程狀態(tài)及切換、關(guān)閉線程的正確姿勢分享
- Java實(shí)現(xiàn)多線程的上下文切換
- Java實(shí)現(xiàn)監(jiān)控多個(gè)線程狀態(tài)的簡單實(shí)例
- 總結(jié)Java中線程的狀態(tài)及多線程的實(shí)現(xiàn)方式
- Java線程池運(yùn)行狀態(tài)監(jiān)控實(shí)現(xiàn)解析
- 學(xué)習(xí)Java多線程之線程定義、狀態(tài)和屬性
- Java線程的6種狀態(tài)及切換教程
相關(guān)文章
mybatis?plus配置自動(dòng)create_time和update_time方式
在處理數(shù)據(jù)時(shí),注意時(shí)間類型的轉(zhuǎn)換非常重要,不同編程環(huán)境和數(shù)據(jù)庫對時(shí)間數(shù)據(jù)的處理方式各異,因此在數(shù)據(jù)遷移或日常處理中需謹(jǐn)慎處理時(shí)間格式,個(gè)人經(jīng)驗(yàn)表明,了解常用的時(shí)間轉(zhuǎn)換函數(shù)和方法能有效避免錯(cuò)誤,提高工作效率,希望這些經(jīng)驗(yàn)?zāi)転榇蠹規(guī)韼椭?/div> 2024-09-09SpringBoot多數(shù)據(jù)源的兩種實(shí)現(xiàn)方式實(shí)例
最近在項(xiàng)目開發(fā)中,需要為一個(gè)使用MySQL數(shù)據(jù)庫的SpringBoot項(xiàng)目,新添加一個(gè)PLSQL數(shù)據(jù)庫數(shù)據(jù)源,下面這篇文章主要給大家介紹了關(guān)于SpringBoot多數(shù)據(jù)源的兩種實(shí)現(xiàn)方式,需要的朋友可以參考下2022-04-04Kotlin 內(nèi)聯(lián)函數(shù)詳解及實(shí)例
這篇文章主要介紹了Kotlin 內(nèi)聯(lián)函數(shù)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-06-06Java異步線程中的CompletableFuture與@Async詳解
這篇文章主要介紹了Java異步線程中的CompletableFuture與@Async詳解,CompletableFuture是java中提供的一個(gè)異步執(zhí)行類,@Async是Spring提供的異步執(zhí)行方法,當(dāng)調(diào)用方法單獨(dú)開啟一個(gè)線程進(jìn)行調(diào)用,需要的朋友可以參考下2024-01-01Spring集成MyBatis?及Aop分頁的實(shí)現(xiàn)代碼
這篇文章主要介紹了Spring集成MyBatis?及Aop分頁的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04@insert mybatis踩坑記錄,實(shí)體接收前端傳遞的參數(shù)
這篇文章主要介紹了@insert mybatis踩坑記錄,實(shí)體接收前端傳遞的參數(shù)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07詳解Struts2中json 相互引用死循環(huán)解決辦法
本篇文章主要介紹詳解Struts2中json 相互引用死循環(huán)解決辦法,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01最新評(píng)論