Java 多線程使用要點分析
多線程細(xì)節(jié)問題
sleep方法和wait方法的異同點?
相同點:
讓線程處于凍結(jié)狀態(tài).
不同點:
sleep必須指定時間
wait可以指定時間也可以不指定時間
sleep時間到,線程處于臨時阻塞狀態(tài)或者運行態(tài)
wait如果沒有時間,必須通過notify或者notifyAll喚醒
sleep不一定非要定義在同步中
wait必須定義在同步中
都定義在同步中時
sleep放執(zhí)行權(quán),不放鎖
wait放執(zhí)行權(quán),放鎖
syschronized(obj)
{
wait();// 0 1 2
code...
}
syschronized(obj)
{
notifyAll();// 3
code...
}
線程如何停止
stop方法
stop方法已經(jīng)過時,看描述發(fā)現(xiàn),有其他解決方案.
線程結(jié)束:就是讓線程任務(wù)代碼執(zhí)行完,run方法結(jié)束
run方法如何結(jié)束?
通過定義循環(huán)
注意:萬一線程在任務(wù)中處于凍結(jié)狀態(tài)他還能判斷標(biāo)記嗎?
所謂的中斷狀態(tài)并不是停止線程.
interrupt中斷狀態(tài)使
如果目標(biāo)線程等待很長時間,則應(yīng)使用 interrupt 方法來中斷該等待
所謂的中斷并不是停止線程。
interrupt的功能是 將線程的凍結(jié)狀態(tài)清除,讓線程恢復(fù)到的運行狀態(tài)(讓線程重新具備cpu的執(zhí)行資格)。
因為時強制性的所以會有異常InterruptedException發(fā)生,可以在catch中捕獲異常,
在異常處理中,改變標(biāo)記讓循環(huán)結(jié)束,讓run方法結(jié)束。
守護(hù)線程
守護(hù)線程:也可以理解為后臺線程,之前創(chuàng)建的都是前臺線程。
只要線程調(diào)用了setDaemon(true);就可以把線程標(biāo)記為守護(hù)線程。
前臺后臺線程運行時都是一樣的,獲取CPU的執(zhí)行權(quán)執(zhí)行。
只有結(jié)束的時候有些不同。
前臺線程要通過run方法結(jié)束,線程結(jié)束。
后臺線程也可以通過run方法結(jié)束,線程結(jié)束,還有另一種情況,
當(dāng)進(jìn)程中所有的前臺線程都結(jié)束了,這時無論后臺線程處于什么樣的狀態(tài),都會結(jié)束,從而進(jìn)程會結(jié)束。
進(jìn)程結(jié)束依賴的都是前臺線程。
線程優(yōu)先級
線程的優(yōu)先級:用數(shù)字標(biāo)識的,1-10
其中默認(rèn)的初始優(yōu)先級時5 最明顯的三個優(yōu)先級 1,5,10。
setPriority(Thread.MAX_PRIORITY);
線程組
線程組:ThreadGroup:可以通過Thread的構(gòu)造函數(shù)明確新線程對象所屬的線程組。
線程組的好處,可以對多個同組線程,進(jìn)行統(tǒng)一的操作。
默認(rèn)都屬于main線程組。
匿名內(nèi)部類
Runnable rn = new Runnable() {
public void run() {
}
};
//上述代碼等價于
class Anomymous implements Runnable {
public void run() {
}
}
Runnable rn = new Anomymous();
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
一行命令同時修改maven項目中多個module的版本號的方法
這篇文章主要介紹了一行命令同時修改maven項目中多個module的版本號的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06
詳解Spring Data JPA動態(tài)條件查詢的寫法
本篇文章主要介紹了Spring Data JPA動態(tài)條件查詢的寫法 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
Java實戰(zhàn)之基于I/O流設(shè)計的圖書管理系統(tǒng)
這篇文章主要介紹了Java實戰(zhàn)之基于I/O流設(shè)計的圖書館管理系統(tǒng),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
idea配置springboot熱部署終極解決辦法(解決熱部署失效問題)
這篇文章主要介紹了idea配置springboot熱部署終極解決辦法(解決熱部署失效問題),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-07-07
Mybatis使用JSONObject接收數(shù)據(jù)庫查詢的方法
這篇文章主要介紹了Mybatis使用JSONObject接收數(shù)據(jù)庫查詢,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12
RocketMQ?NameServer架構(gòu)設(shè)計啟動流程
這篇文章主要為大家介紹了RocketMQ?NameServer架構(gòu)設(shè)計啟動流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Java獲取Excel中圖片所在的行和列坐標(biāo)位置
這篇文章主要介紹了Java獲取Excel中圖片所在的行和列坐標(biāo)位置,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-08-08
Spring學(xué)習(xí)筆記3之消息隊列(rabbitmq)發(fā)送郵件功能
這篇文章主要介紹了Spring學(xué)習(xí)筆記3之消息隊列(rabbitmq)發(fā)送郵件功能的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07

