本篇文章給大家分享的是有關(guān)如何深入理解Java多線程與并發(fā)框中線程的狀態(tài),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
成都創(chuàng)新互聯(lián)公司專(zhuān)注于網(wǎng)站建設(shè),為客戶(hù)提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)開(kāi)發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗(yàn),各類(lèi)網(wǎng)站都可以開(kāi)發(fā),品牌網(wǎng)站建設(shè),公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計(jì),建網(wǎng)站費(fèi)用,建網(wǎng)站多少錢(qián),價(jià)格優(yōu)惠,收費(fèi)合理。
1. 新建狀態(tài)(New)
萬(wàn)事萬(wàn)物都不是憑空出現(xiàn)的,線程也一樣,它被創(chuàng)建后的狀態(tài)稱(chēng)為 新建 狀態(tài)。
比如:
Thread thread = new Thread();
2. 可運(yùn)行狀態(tài)(Runable)
線程被創(chuàng)建后是不能使用的,就是讓用戶(hù)在此期間設(shè)置一些屬性,
比如:
// 設(shè)置類(lèi)加載器 thread.setContextClassLoader(System.class.getClassLoader()); // 設(shè)置線程名稱(chēng) thread.setName("商品服務(wù)-product-service"); // 是否為守護(hù)線程/用戶(hù)線程 thread.setDaemon(false); // 設(shè)置線程優(yōu)先級(jí) thread.setPriority(5);
通過(guò) thread.start() 方法開(kāi)啟線程,開(kāi)啟后意味著該線程 “能夠” 運(yùn)行,并不意味著一定會(huì)運(yùn)行,因?yàn)樗獡屨假Y源,獲取CPU的使用權(quán)后,才能運(yùn)行。所以此狀態(tài)稱(chēng)為 可運(yùn)行狀態(tài)。從上圖中可以看出,不僅通過(guò) start() 啟動(dòng)一個(gè)線程后可以進(jìn)入 Runnable 狀態(tài),還可以通過(guò)其他方式到達(dá) Runnable 狀態(tài)。
3. 運(yùn)行狀態(tài)(Running)
線程通過(guò)努力,獲得了CPU的使用權(quán),就會(huì)進(jìn)入執(zhí)行程序,此時(shí)狀態(tài)被稱(chēng)為 運(yùn)行狀態(tài)。
4. 阻塞狀態(tài)(BLOCKED)
多線程搶占CPU資源,同一時(shí)刻僅有一個(gè)線程進(jìn)入臨界區(qū),為保證對(duì)資源訪問(wèn)的線程安全,同一時(shí)刻僅有一個(gè)線程進(jìn)入 synchronized 同步塊,而其他未獲得訪問(wèn)權(quán)的線程將進(jìn)入 阻塞狀態(tài) 。
等待阻塞:通過(guò)調(diào)用線程的wait()方法,讓線程等待某工作的完成。
同步阻塞:線程在獲取synchronized同步鎖失敗(因?yàn)殒i被其它線程所占用),它會(huì)進(jìn)入同步阻塞狀態(tài)。
其他阻塞:通過(guò)調(diào)用線程的sleep()或join()或發(fā)出了I/O請(qǐng)求時(shí),線程會(huì)進(jìn)入到阻塞狀態(tài)。當(dāng)sleep()狀態(tài)超時(shí)、join()等待線程終止或者超時(shí)、或者I/O處理完畢時(shí),線程重新轉(zhuǎn)入就緒狀態(tài)。
5. 睡眠狀態(tài) TIMED_WAITING(sleeping)
通過(guò)調(diào)用對(duì)象的wait(time)方法或調(diào)用線程的sleep(time)/join(time),等待/睡眠指定的時(shí)間,此時(shí)該線程會(huì)進(jìn)入TIMED_WAITING(sleeping) 狀態(tài),直接時(shí)間已到,會(huì)進(jìn)入Runnable狀態(tài),重新?lián)屨糃PU資源。
6. 等待狀態(tài) WAITING
通過(guò)調(diào)用對(duì)象的wait()方法,讓搶占資源的線程等待某工作的完成,或主動(dòng)join()其他線程,讓當(dāng)前線程釋放資源等待被join的線程完成工作,而該線程將進(jìn)入 等待狀態(tài) 。
7. 死亡狀態(tài)(Dead)
線程執(zhí)行完了或者因異常退出了run()方法,該線程結(jié)束生命周期。
以上就是如何深入理解Java多線程與并發(fā)框中線程的狀態(tài),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。