Java 多線程使用要點(diǎn)分析
多線程細(xì)節(jié)問題
sleep方法和wait方法的異同點(diǎn)?
相同點(diǎn):
讓線程處于凍結(jié)狀態(tài).
不同點(diǎn):
sleep必須指定時(shí)間
wait可以指定時(shí)間也可以不指定時(shí)間
sleep時(shí)間到,線程處于臨時(shí)阻塞狀態(tài)或者運(yùn)行態(tài)
wait如果沒有時(shí)間,必須通過(guò)notify或者notifyAll喚醒
sleep不一定非要定義在同步中
wait必須定義在同步中
都定義在同步中時(shí)
sleep放執(zhí)行權(quán),不放鎖
wait放執(zhí)行權(quán),放鎖
syschronized(obj) { wait();// 0 1 2 code... } syschronized(obj) { notifyAll();// 3 code... }
線程如何停止
stop方法
stop方法已經(jīng)過(guò)時(shí),看描述發(fā)現(xiàn),有其他解決方案.
線程結(jié)束:就是讓線程任務(wù)代碼執(zhí)行完,run方法結(jié)束
run方法如何結(jié)束?
通過(guò)定義循環(huán)
注意:萬(wàn)一線程在任務(wù)中處于凍結(jié)狀態(tài)他還能判斷標(biāo)記嗎?
所謂的中斷狀態(tài)并不是停止線程.
interrupt中斷狀態(tài)使
如果目標(biāo)線程等待很長(zhǎng)時(shí)間,則應(yīng)使用 interrupt 方法來(lái)中斷該等待
所謂的中斷并不是停止線程。
interrupt的功能是 將線程的凍結(jié)狀態(tài)清除,讓線程恢復(fù)到的運(yùn)行狀態(tài)(讓線程重新具備cpu的執(zhí)行資格)。
因?yàn)闀r(shí)強(qiáng)制性的所以會(huì)有異常InterruptedException發(fā)生,可以在catch中捕獲異常,
在異常處理中,改變標(biāo)記讓循環(huán)結(jié)束,讓run方法結(jié)束。
守護(hù)線程
守護(hù)線程:也可以理解為后臺(tái)線程,之前創(chuàng)建的都是前臺(tái)線程。
只要線程調(diào)用了setDaemon(true);就可以把線程標(biāo)記為守護(hù)線程。
前臺(tái)后臺(tái)線程運(yùn)行時(shí)都是一樣的,獲取CPU的執(zhí)行權(quán)執(zhí)行。
只有結(jié)束的時(shí)候有些不同。
前臺(tái)線程要通過(guò)run方法結(jié)束,線程結(jié)束。
后臺(tái)線程也可以通過(guò)run方法結(jié)束,線程結(jié)束,還有另一種情況,
當(dāng)進(jìn)程中所有的前臺(tái)線程都結(jié)束了,這時(shí)無(wú)論后臺(tái)線程處于什么樣的狀態(tài),都會(huì)結(jié)束,從而進(jìn)程會(huì)結(jié)束。
進(jìn)程結(jié)束依賴的都是前臺(tái)線程。
線程優(yōu)先級(jí)
線程的優(yōu)先級(jí):用數(shù)字標(biāo)識(shí)的,1-10
其中默認(rèn)的初始優(yōu)先級(jí)時(shí)5 最明顯的三個(gè)優(yōu)先級(jí) 1,5,10。
setPriority(Thread.MAX_PRIORITY);
線程組
線程組:ThreadGroup:可以通過(guò)Thread的構(gòu)造函數(shù)明確新線程對(duì)象所屬的線程組。
線程組的好處,可以對(duì)多個(gè)同組線程,進(jìn)行統(tǒng)一的操作。
默認(rèn)都屬于main線程組。
匿名內(nèi)部類
Runnable rn = new Runnable() { public void run() { } }; //上述代碼等價(jià)于 class Anomymous implements Runnable { public void run() { } } Runnable rn = new Anomymous();
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
使用Spring Boot的LoggersEndpoint管理日志級(jí)別
這篇文章主要為大家介紹了使用Spring Boot的LoggersEndpoint管理日志級(jí)別,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11SpringBoot+MyBatisPlus+Vue 前后端分離項(xiàng)目快速搭建過(guò)程(后端)
這篇文章主要介紹了SpringBoot+MyBatisPlus+Vue 前后端分離項(xiàng)目快速搭建過(guò)程(后端),快速生成后端代碼、封裝結(jié)果集、增刪改查、模糊查找,畢設(shè)基礎(chǔ)框架,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05解決IDEA2020 創(chuàng)建maven項(xiàng)目沒有src/main/java目錄和webapp目錄問題
這篇文章主要介紹了IDEA2020 創(chuàng)建maven項(xiàng)目沒有src/main/java目錄和webapp目錄問題解決方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Eclipse中查看android工程代碼出現(xiàn)"android.jar has no source attachment
這篇文章主要介紹了Eclipse中查看android工程代碼出現(xiàn)"android.jar has no source attachment"的解決方案,需要的朋友可以參考下2016-05-05Java中super關(guān)鍵字的用法和細(xì)節(jié)
大家好,本篇文章主要講的是Java中super關(guān)鍵字的用法和細(xì)節(jié),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01Java子線程調(diào)用RequestContextHolder.getRequestAttributes()方法問題詳解
這篇文章主要介紹了Java子線程調(diào)用RequestContextHolder.getRequestAttributes()方法問題處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09