日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 手动线程调度_Java Thread 多线程 操作线程

發布時間:2025/4/16 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 手动线程调度_Java Thread 多线程 操作线程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

5、線程的創建和啟動

A、繼承Thread類或實現Runnable接口,重寫或實現run方法,run方法代表線程要完成的任務

B、創建Thread子類或是Runnable的實現類,即創建的線程對象;不同的是接口實現線程,

需要將接口的實現類作為參數傳遞給Thread類的構造參數

C、用線程對象的start方法啟動線程

6、繼承Thread和實現Runnable接口創建線程的區別

采用Runnable接口實現線程:

優勢:

A、線程類只是實現了Runnable接口,還可以繼承其他的類

B、在這種方式下,可以多個線程共享同一個目標對象,所以很合適多個線程來處理同一份資源的情況,

從而可以將CPU、代碼和數據分開,形成清晰的模型,較好的面相對象思想。

劣勢:編程稍微復雜,如果需要訪問當前線程需要用Thread.currentThread方法來獲取

采用繼承Thread類的方式實現線程:

優勢:編寫簡單,如果要獲得當前線程直接this即可

劣勢:線程類繼承了Thread,不能在繼承其他類

相對而言,用Runnable的方式更好,具體可以根據當前需要而定;

7、線程生命周期

線程被創建啟動后,不并不是啟動后就進入了執行狀態,也不是一直處于的執行狀態。

線程的生命周期分為創建(new)、就緒(Runnable)、運行(running)、阻塞(Blocked)、死亡(Dead)五種狀態。

線程啟動后不會一直霸占CPU資源,所以CPU需要在多條線程中切換執行,線程就會在多次的運行和阻塞中切換。

8、新建(new)和就緒(Runnable)狀態

當new一個線程后,該線程處于新建狀態,此時它和Java對象一樣,僅僅由Java虛擬機為其分配內存空間,并初始化成員變量。

此時線程對象沒有表現出任何的動態特征,程序也不會執行線程的執行體。

注意:run方法是線程的執行體,不能由我們手動調用。我們可以用start方法啟動線程,系統會把run方法當成線程的執行體來運行,

如果直接調用線程對象run方法,則run方法立即會被運行。而且在run方法返回之前其他線程無法并行執行,

也就是說系統會把當前線程類當成一個普通的Java對象,而run方法也是一個普通的方法,而不是線程的執行體。

9、運行(running)和阻塞(Blocked)狀態

如果處于就緒狀態的線程就獲得了CPU,開始執行run方法的線程執行體,則該線程處于運行狀態。

單CPU的機器,任何時刻只有一條線程處于運行狀態。當然,在多CPU機器上將會有多線程并行(parallel)執行,

當線程大于CPU數量時,依然會在同一個CPU上切換執行。

線程運行機制:一個線程運行后,它不可能一直處于運行狀態(除非它執行的時間很短,瞬間執行完成),線程在運行過程中需要中斷,

目的是讓其他的線程有運行機會,線程的調度取決于底層的策略。對應搶占式的系統而言,系統會給每個可執行的線程一個小時間段來處理任務,

當時間段到達系統就會剝奪該線程的資源,讓其他的線程有運行的機會。在選擇下一個線程時,系統會考慮線程優先級。

以下情況會出現線程阻塞狀態:

A、線程調用sleep方法,主動放棄占用的處理器資源

B、線程調用了阻塞式IO方法,在該方法返回前,該線程被阻塞

C、線程試圖獲得一個同步監視器,但該同步監視器正被其他線程所持有。

D、線程等待某個通知(notify)

E、程序調用了suspend方法將該線程掛起。不過這個方法容易導致死鎖,盡量不免使用該方法

當線程被阻塞后,其他線程將有機會執行。被阻塞的線程會在合適的時候重新進入就緒狀態,注意是就緒狀態不是運行狀態。

也就是被阻塞線程在阻塞解除后,必須重新等待線程調度器再次調用它。

針對上面線程阻塞的情況,發生以下特定的情況可以解除阻塞,讓進程進入就緒狀態:

A、調用sleep方法的經過了指定的休眠時間

B、線程調用的阻塞IO已經返回,阻塞方法執行完畢

C、線程成功獲得了試圖同步的監視器

D、線程正在等待某個通知,其他線程發出了通知

E、處于掛起狀態的線程調用了resume恢復方法

線程從阻塞狀態只能進入就緒狀態,無法進入運行狀態。而就緒和運行狀態之間的轉換通常不受程序控制,而是由系統調度所致的。

當就緒狀態的線程獲得資源時,該線程進入運行狀態;當運行狀態的線程事情處理器資源時就進入了就緒狀態。

但對調用了yield的方法就例外,此方法可以讓運行狀態轉入就緒狀態。

10、線程死亡(Dead)狀態

線程會在以下方式進入死亡狀態:

A、run方法執行完成,線程正常結束

B、線程拋出未捕獲的異常或Error

C、直接調用該線程的stop方法來結束線程—該方法易導致死鎖,注意使用

注意:當主線程結束的時候,其他線程不受任何影響。一旦子線程啟動后,會擁有和主線程相同的地位,不受主線程影響。

isAlive方法可以測試當前線程是否死亡,當線程處于就緒、運行、阻塞狀態,該方法返回true,如果線程處于新建或死亡狀態就會返回false。

不要試圖對死亡的線程調用start方法,來啟動它。死亡線程不可能再次運行。

11、控制線程

Java線程提供了很多工具方法,這些方法都很好的控制線程

A、join線程

讓一個線程等待另一個線程完成的方法。當某個程序執行流中調用其他線程的join方法時,調用線程將會被阻塞,直到被join方法的join線程執行完成為止。

join方法通常有使用線程的程序調用,將大問題劃分成許多小問題。每個小問題分配一個線程。當所有的小問題得到處理后,再調用主線程進一步操作。

join有三種重載模式:

一、join等待被join的線程執行完成

二、join(long millis)等待被join的線程時間最長為millis毫秒,如果在millis毫秒外,被join的線程還沒有執行完則不再等待

三、join(long millis, int nanos)被join的線程等待時間長為millis毫秒加上nanos微秒

通常我們很少用第三種join,原因有二:程序對時間的精度無需精確到千分之一毫秒

計算機硬件、操作系統也無法做到精確到千分之一毫秒

B、后臺線程

有一種線程,在后臺運行,它的任務是為其他線程提供服務,這種線程被稱為“后臺線程(Daemon Thread)”,有被稱為“守護線程”或“精靈線程”。

JVM的垃圾回收器線程就是后臺進程。

后臺進程有個特征是:如果前臺的進程都死亡,那么后臺進程也死亡。(它為前臺進程服務)

用Thread的setDaemon (true)方法可以指定當前線程為后臺線程。

注意:前臺線程執行完成死亡后,JVM會通知后臺線程,后臺線程就會死亡。但它得到通知到后臺線程作成響應,需要一段時間,

而且要將某個線程設置為后臺線程,必需要在該線程啟動前設置,也就是說設置setDaemon必需在start方法前面調用。

否則會出現java.lang.IllegalThreadStateException異常

C、線程休眠sleep

如果需要當前線程暫停一段時間,并進入阻塞狀態就需要用sleep,sleep有2中重載方式:

sleep(long millis)讓當前線程暫停millis毫秒后,并進入阻塞狀態,該方法受系統計時器和線程調度器的影響

sleep(long millis, int nanos)讓當前正在執行的線程暫停millis毫秒+nanos微秒,并進入阻塞

當調用sleep方法進入阻塞狀態后,在sleep時間段內,該線程不會獲得執行機會,即使沒有其他可運行的線程,處于sleep的線程不會執行。

D、線程讓步yield

yield和sleep有點類似,它也可以讓當前執行的線程暫停,但它不會阻塞線程,只是將該線程轉入到就緒狀態。

yield只是讓當前線程暫停下,讓系統線程調度器重新調度下。

當yield的線程后,當前線程暫停。系統線程調度器會讓優先級相同或是更高的線程運行。

sleep和yield的區別

(1)、sleep方法暫停當前線程后,會給其他線程執行集合,不會理會線程的優先級。但yield則會給優先級相同或高優先級的線程執行機會

(2)、sleep方法會將線程轉入阻塞狀態,直到經過阻塞時間才會轉入到就緒狀態;而yield則不會將線程轉入到阻塞狀態,它只是強制當前線程進入就緒狀態。

因此完全有可能調用yield方法暫停之后,立即再次獲得處理器資源繼續運行。

(3)、sleep聲明拋出了InterruptedException異常,所以調用sleep方法時,要么捕獲異常,要么拋出異常。而yield沒有申明拋出任何異常

E、改變線程優先級

每個線程都有優先級,優先級決定線程的運行機會的多少。

每個線程默認和它創建的父類的優先級相同,main方法的優先級是普通優先級,那在main方法中創建的子線程都是普通優先級。

getPriority(int newPriority)/setPriority(int)

設置優先級有以下級別:

MAX_PRIORITY 值是10

MIN_PRIORITY 值是1

NORM_PRIORITY 值是5

范圍是1-10;

總結

以上是生活随笔為你收集整理的java 手动线程调度_Java Thread 多线程 操作线程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久免费在线视频 | 日韩精品美女 | 肉色丝袜小早川怜子av | 国产亚洲一区二区不卡 | 天堂一级片 | 波多野结衣办公室双飞 | 拔插拔插影库 | 国产日韩视频 | 少妇的被肉日常np | 亚洲性欧美 | 天天艹日日干 | 天天伊人网 | 亚洲一级色 | 亚洲一级片 | 国产三级做爰高清在线 | 国产又粗又猛又爽免费视频 | 国产精品久久久久久久久借妻 | 亚洲色图.com| 天天看片天天射 | 久久国产视频网站 | 欧美熟妇交换久久久久久分类 | 偷偷色噜狠狠狠狠的777米奇 | 亚洲日本片 | 欧美激情综合网 | 欧美毛片免费看 | 91黄瓜视频 | 风流还珠之乱淫h文 | 麻豆传媒视频入口 | 欧美日韩一级在线观看 | 岛国色图 | 精品99999| 动漫美女被x | 少妇裸体淫交视频免费看高清 | 亚洲色图国产精品 | 中文字幕成人 | 韩国性猛交╳xxx乱大交 | 欧美精品日韩精品 | 亚洲第一福利网站 | 双性皇帝高h喷汁呻吟 | 91成人在线免费视频 | 五月天一区二区三区 | 99精品视频免费版的特色功能 | 亚洲人成一区 | 夜夜艹天天干 | 好吊色一区二区三区 | 狼人综合网 | 男女激情啪啪 | 国产精品色婷婷99久久精品 | 中文字幕一区二区不卡 | 欧美高清videos高潮hd | 激情综合视频 | 国产一区二区三区欧美 | 欧美日韩加勒比 | 久久精品无码一区二区三区免费 | 成人手机av| 少妇愉情理伦片bd | 四虎永久网址 | 滋润少妇h高h | 欧美无人区码suv | 精品美女www爽爽爽视频 | 国产女同91疯狂高潮互磨 | 国产嫩草影院久久久 | 国产伦精品一区二区三区免费视频 | 欧美成人激情 | 懂色中文一区二区在线播放 | 国产精品久久久久久久久免费 | 国产无遮挡aaa片爽爽 | 狠狠操狠狠操狠狠操 | 黄色国产在线 | 一区二区三区国产在线观看 | 久91| 亚洲淫片 | 亚洲av成人一区二区国产精品 | 国产精品久久久久久人 | 特级丰满少妇一级aaaa爱毛片 | 欧美日韩精品区别 | 中文字幕91 | 嫩草视频在线看 | 欧美精品三区 | 欧美麻豆 | 亚洲性xxx | 老头老太吃奶xb视频 | 欧美在线观看视频一区二区 | 奇米影视9999 | 高清不卡一区 | 桃色综合网 | 96免费视频 | 涩里番在线观看 | 麻豆性生活 | 亚洲欧美日本一区二区 | 天天做天天爱天天爽综合网 | 日韩国产综合 | www.色天使 | 国产欧美日韩在线观看 | 国产一区二区三区高清 | 日本捏奶吃奶的视频 | 日本加勒比在线 | av中文字幕不卡 | 手机看片日韩福利 |