JavaSE入门学习51:多线程编程(二)
二Java多線程
? ? ? ?(4)線程的狀態
? ? ? ?線程狀態轉換示意圖:
? ? ? ?線程控制的基本方法:
? ? ? ?1)sleep()方法
? ? ? ?可以調用Thread的靜態方法:
? ? ? ?public static void sleep(long millis) throws interruptedException
? ? ? ?使得當前線程休眠(暫時停止執行millis毫秒)
? ? ? ?由于是靜態方法,sleep()方法可以由類名直接調用
? ? ? ?thread.sleep(...)
? ? ? ?實例:
? ? ? ?打印十次當前日期時間
[java]?view plaincopy print?
? ? ? ?運行結果:
? ? ? ?打印兩次間隔5秒的目前時間然后結束
[java]?view plaincopy print?
? ? ? ?運行結果
? ? ? ?2)join()方法
? ? ? ?join()方法用于合并某個線程,也就是等著線程1執行完畢后,主線程才會執行。
[java]?view plaincopy print?? ? ? ?運行結果:
? ? ? ?3)yield()方法
? ? ? ?讓出CPU,給其它線程執行的機會
[java]?view plaincopy print?
? ? ? ?運行結果:
? ? ? ??(5)線程的優先級別
? ? ? ??Java提供一個線程調度器來監控程序中啟動后進入就緒狀態的所有線程。線程調度器按照線程的優先級決定應調
度哪個線程來執行。
? ? ? ?線程的優先級用數字表示,范圍從1到10,一個線程的缺省優先級是5。
? ? ? ?Thread.MIN_PRIORITY=1
? ? ? ?Thread.MAX_PRIORITY=10
? ? ? ?Thread.NORM_PRIORITY=5
? ? ? ?還使用下述方法獲得或設置線程對象的優先級
? ? ? ?獲得線程對象的優先級的方法:
? ? ? ?int getPriority();
? ? ? ?設置線程對象的優先級的方法:
? ? ? ?void setPriority(int newPriority);
? ? ? ?實例1代碼:
[java]?view plaincopy print?
? ? ? ?運行結果:
? ? ? ? 線程1的優先級高于線程2,因此線程1獲得CPU的時間片多于線程2的時間片。
? ? ? ? 實例2代碼:
[java]?view plaincopy print?
? ? ? ? 運行結果:
? ? ? ? Thread.currentThread().isAlive()方法用于測試線程是否處于活動狀態。
? ? ? ??三線程同步
? ? ? ? 在Java語言中,引入了對象互斥鎖的概念,保證共享數據操作的完整性,每個對象都對應于一個可稱為互斥鎖的
標記,這個標記保證在任一時刻,只能有一個線程訪問的該對象。
? ? ? ??(1)synchronized關鍵字的用法
? ? ? ? 關鍵字synchronized來與對象的互斥鎖聯系,當某個對象synchronized修飾時,表明該對象在任一時刻只能有一
個線程訪問。
? ? ? ? synchronized關鍵字的使用方法:
[java]?view plaincopy print?
? ? ? ? synchronized關鍵字還可以放在方法聲明中,表示整個方法為同步方法,例如:
? ? ? ? public synchronized void add(String name){...}
? ? ? ??實例代碼:
[java]?view plaincopy print?
? ? ? ? 運行結果:
? ? ? ?顯然上述的結果令我們不滿意,這就需要使用線程同步機制。? ? ?
? ? ? ?改寫后的使用同步鎖塊的代碼:
[java]?view plaincopy print?
? ? ? ?運行結果:
? ? ? ?改寫后的使用同步鎖的代碼:
[java]?view plaincopy print?
? ? ? ?編譯運行是和上述同樣的結果。
? ? ? ?(2)死鎖
? ? ? ?所謂死鎖: 是指兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現
象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進
程稱為死鎖進程。
? ? ? ?死鎖產生的實例代碼:
[java]?view plaincopy print?
? ? ? ?運行結果:
X
from:?http://blog.csdn.net/erlian1992/article/details/51707195
總結
以上是生活随笔為你收集整理的JavaSE入门学习51:多线程编程(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaSE入门学习50:多线程编程(一
- 下一篇: JavaSE学习52:细说多线程之Thr