亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 Java Java基礎(chǔ) java線程的幾種狀態(tài)是什麼?

java線程的幾種狀態(tài)是什麼?

Jul 24, 2020 am 11:37 AM
java 線程狀態(tài)

java執(zhí)行緒的5種狀態(tài):1、初始狀態(tài)。 2.可運行狀態(tài),位於可運行執(zhí)行緒池中,等待被執(zhí)行緒調(diào)度選中,取得cpu的使用權(quán)。 3、運行狀態(tài)。 4.阻塞狀態(tài),指線程因為某些原因放棄了cpu使用權(quán)。 5.死亡狀態(tài),死亡的線程不可再復(fù)生。

java線程的幾種狀態(tài)是什麼?

Java中的執(zhí)行緒的生命週期大致可分為5種狀態(tài)。

1、初始狀態(tài)(NEW):新建立了一個執(zhí)行緒物件。

2、可運行(RUNNABLE):執(zhí)行緒物件建立後,其他執(zhí)行緒(如main執(zhí)行緒)呼叫了該物件的start()方法。此狀態(tài)的執(zhí)行緒位於可運行執(zhí)行緒池中,等待被執(zhí)行緒調(diào)度選中,取得cpu的使用權(quán) 。

3、運行(RUNNING):可運行狀態(tài)(runnable)的執(zhí)行緒獲得了cpu 時間片(timeslice) ,執(zhí)行程式碼。

4. 阻塞(BLOCKED):阻塞狀態(tài)是指執(zhí)行緒因為某些原因放棄了cpu 使用權(quán),也即讓出了cpu timeslice,暫時停止運作。直到執(zhí)行緒進(jìn)入可運行(runnable)狀態(tài),才有機(jī)會再次獲得cpu timeslice 轉(zhuǎn)到運行(running)狀態(tài)。阻塞的情況分為三種:?

(1)、等待阻塞:執(zhí)行(running)的執(zhí)行緒執(zhí)行o.wait()方法,JVM會把該執(zhí)行緒放入等待佇列(waitting queue)中。

(2)、同步阻塞:執(zhí)行(running)的執(zhí)行緒在取得物件的同步鎖定時,若該同步鎖定被別的執(zhí)行緒佔用,則JVM會把該執(zhí)行緒放入鎖定池(lock pool )中。

(3)、其他阻塞:當(dāng)執(zhí)行(running)的執(zhí)行緒執(zhí)行Thread.sleep(long ms)或t.join()方法,或發(fā)出了I/O請求時,JVM會把該執(zhí)行緒置為阻塞狀態(tài)。當(dāng)sleep()狀態(tài)逾時、join()等待執(zhí)行緒終止或逾時、或I/O處理完畢時,執(zhí)行緒重新轉(zhuǎn)入可運行(runnable)狀態(tài)。

5、死亡(DEAD):執(zhí)行緒run()、main() 方法執(zhí)行結(jié)束,或因異常退出了run()方法,則該執(zhí)行緒結(jié)束生命週期。死亡的線不可再復(fù)生。

一、執(zhí)行緒的狀態(tài)圖

java線程的幾種狀態(tài)是什麼?

#二、初始狀態(tài)

實現(xiàn)Runnable介面與繼承Thread可以得到一個執(zhí)行緒類,new一個實例出來,執(zhí)行緒就進(jìn)入了初始狀態(tài)

#三、可運行狀態(tài)

##1、可運行狀態(tài)只是說你資格運行,調(diào)度程式?jīng)]有挑選到你,你就永遠(yuǎn)是可運行狀態(tài)。

2、呼叫執(zhí)行緒的start()方法,此執(zhí)行緒進(jìn)入可運行狀態(tài)。

3、目前執(zhí)行緒sleep()方法結(jié)束,其他執(zhí)行緒join()結(jié)束,等待使用者輸入完畢,某個執(zhí)行緒拿到物件鎖定,這些執(zhí)行緒也會進(jìn)入可運作狀態(tài)。

4、目前執(zhí)行緒時間片用完了,呼叫目前執(zhí)行緒的yield()方法,目前執(zhí)行緒進(jìn)入可運行狀態(tài)。

5、鎖定池裡的執(zhí)行緒拿到物件鎖定後,進(jìn)入可運行狀態(tài)。

四、運行狀態(tài)

執(zhí)行緒調(diào)度程序從可運行池中選擇一個執(zhí)行緒作為目前執(zhí)行緒時執(zhí)行緒所處的狀態(tài)。這也是執(zhí)行緒進(jìn)入運行狀態(tài)的唯一一種方式。

五、死亡狀態(tài)

1、當(dāng)執(zhí)行緒的run()方法完成時,或是主執(zhí)行緒的main()方法完成時,我們就認(rèn)為它死去。這個線程物件也許是活的,但是,它已經(jīng)不是一個單獨執(zhí)行的線程。線一旦死亡,就不能復(fù)生。

2、在一個死去的執(zhí)行緒上呼叫start()方法,會拋出java.lang.IllegalThreadStateException例外。

六、阻塞狀態(tài)

1、目前執(zhí)行緒T呼叫Thread.sleep()方法,目前執(zhí)行緒進(jìn)入阻塞狀態(tài)。

2、運行在目前執(zhí)行緒裡的其它執(zhí)行緒t2呼叫join()方法,目前執(zhí)行緒進(jìn)入阻塞狀態(tài)。

3、等待使用者輸入的時候,目前執(zhí)行緒進(jìn)入阻塞狀態(tài)。

七、等待佇列(本來是Object裡的方法,但影響了執(zhí)行緒)

1、呼叫obj的wait(), notify()方法前,必須取得obj鎖,也就是必須寫在synchronized(obj) 程式碼段內(nèi)。

2、與等待佇列相關(guān)的步驟和圖

  • 線程1取得物件A的鎖,正在使用物件A。

  • 執(zhí)行緒1呼叫物件A的wait()方法。

  • 線程1釋放物件A的鎖,並馬上進(jìn)入等待佇列。

  • 鎖定池裡面的物件爭搶物件A的鎖定。

  • 線程5取得物件A的鎖,進(jìn)入synchronized區(qū)塊,使用物件A。

  • 線程5呼叫物件A的notifyAll()方法,喚醒所有線程,所有執(zhí)行緒進(jìn)入鎖定池。 ||||| 執(zhí)行緒5呼叫物件A的notify()方法,喚醒一個線程,不知道會喚醒誰,被喚醒的那個執(zhí)行緒進(jìn)入鎖定池。

  • notifyAll()方法所在synchronized結(jié)束,執(zhí)行緒5釋放物件A的鎖定。

  • 鎖定池裡面的執(zhí)行緒爭搶物件鎖,但線程1什麼時候能搶到就不知道了。 ||||| 原本鎖定池 第6步被喚醒的執(zhí)行緒一起爭搶物件鎖定。

    java線程的幾種狀態(tài)是什麼?

八、鎖定池狀態(tài)

目前執(zhí)行緒想呼叫物件A的同步方法時,發(fā)現(xiàn)物件A的鎖被別的執(zhí)行緒佔有,此時當(dāng)前執(zhí)行緒進(jìn)入鎖池狀態(tài)。簡言之,鎖池裡面放的都是想爭奪物件鎖的執(zhí)行緒。

當(dāng)一個執(zhí)行緒1被另外一個執(zhí)行緒2喚醒時,1執(zhí)行緒進(jìn)入鎖定池狀態(tài),去爭奪物件鎖定。

鎖定池是在同步的環(huán)境下才有的概念,一個物件對應(yīng)一個鎖定池。

九、幾個方法的比較

Thread.sleep(long millis),一定是當(dāng)前執(zhí)行緒呼叫此方法,當(dāng)前執(zhí)行緒進(jìn)入阻塞,但不釋放對象鎖,millis後執(zhí)行緒自動甦醒進(jìn)入可運作狀態(tài)。作用:給其它執(zhí)行緒執(zhí)行機(jī)會的最佳方式。

Thread.yield(),一定是當(dāng)前執(zhí)行緒呼叫此方法,當(dāng)前執(zhí)行緒放棄取得的cpu時間片,由運行狀態(tài)變會可運行狀態(tài),讓OS再次選擇執(zhí)行緒。作用:讓相同優(yōu)先權(quán)的執(zhí)行緒輪流執(zhí)行,但不保證一定會輪流執(zhí)行。實際上無法保證yield()達(dá)到讓步目的,因為讓步的執(zhí)行緒還有可能被執(zhí)行緒調(diào)度程序再次選取。 Thread.yield()不會導(dǎo)致阻塞。

t.join()/t.join(long millis),當(dāng)前執(zhí)行緒裡呼叫其它執(zhí)行緒1的join方法,目前執(zhí)行緒阻塞,但不釋放物件鎖,直到執(zhí)行緒1執(zhí)行完畢或millis時間到,當(dāng)前執(zhí)行緒進(jìn)入可運行狀態(tài)。

obj.wait(),目前執(zhí)行緒呼叫物件的wait()方法,目前執(zhí)行緒釋放物件鎖,進(jìn)入等待佇列。依靠notify()/notifyAll()喚醒或wait(long timeout)timeout時間到自動喚醒。

obj.notify()喚醒在此物件監(jiān)視器上等待的單一線程,選擇是任意性的。 notifyAll()喚醒在此物件監(jiān)視器上等待的所有執(zhí)行緒。

推薦教學(xué):《java教學(xué)

以上是java線程的幾種狀態(tài)是什麼?的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
VSCODE設(shè)置。 JSON位置 VSCODE設(shè)置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級或工作區(qū)級路徑,用於自定義VSCode設(shè)置。 1.用戶級路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級路徑:項目根目錄下的.vscode/settings

如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動提交模式,再執(zhí)行多個操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務(wù);2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點實現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

在Java的掌握依賴注入春季和Guice 在Java的掌握依賴注入春季和Guice Aug 01, 2025 am 05:53 AM

依賴性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推廣looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

了解Java虛擬機(jī)(JVM)內(nèi)部 了解Java虛擬機(jī)(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

Google Chrome無法打開本地文件 Google Chrome無法打開本地文件 Aug 01, 2025 am 05:24 AM

ChromecanopenlocalfileslikeHTMLandPDFsbyusing"Openfile"ordraggingthemintothebrowser;ensuretheaddressstartswithfile:///;2.SecurityrestrictionsblockAJAX,localStorage,andcross-folderaccessonfile://;usealocalserverlikepython-mhttp.server8000tor

了解網(wǎng)絡(luò)端口和防火牆 了解網(wǎng)絡(luò)端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

See all articles