1、新建 new thread()
2、就緒 thread.start()
3、執行 從就緒態獲取cpu
4、阻塞 處於執行狀態中的執行緒由於某種原因(wait(),sleep(),join(),i/o),暫時放棄對cpu的使用權,停止執行,此時進入阻塞狀態,直到其進入到就緒狀態,才 有機會再次被cpu呼叫以進入到執行狀態。分為 等待阻塞(wait()),同步阻塞(synchronized),其它阻塞(sleep(),join(),i/o())
5、死亡 執行緒執行完或異常退出
1、建立乙個mythread類繼承自thread類,重寫run()方法。
2、建立乙個myrunnable類實現runnable介面,重寫run()方法。
3、建立乙個mycallable類實現callable介面,重寫帶返回值的call()方法。
建立futuretask類物件,使用futuretask類包裝mycallable物件。
建立乙個thread類物件,以ft為target,並start該執行緒。
通過ft.get()獲取返回值。
1、join() 使當前執行緒阻塞,到下乙個執行緒執行完回來執行該執行緒
2、sleep() 使當前執行緒阻塞一定時間,此期間其它執行緒可以獲取cpu時間
3、 setdaemon(true) 使前台程序轉變為後台程序。(所有前台程序死亡後,後台程序生命週期結束)
4、setpriority(1~10) 設定優先順序,10最大,1最小。正常的執行緒是5。 較大優先順序的執行緒只是更有機率獲取cpu時間,並非優先執行
5、yield() 執行緒讓步,當前程序由執行轉為就緒,cpu選取優先順序大於等於該優先順序的執行緒執行
該部分參考自:
為了避免生產者生產之前,消費者已經試圖獲取資源。即多個執行緒同事訪問某個共享資源,因此,為避免執行緒安全問題,應該避免多執行緒環境下對此共享資源的併發訪問。
1、同步方法
在方法前加上synchronized關鍵字 ,如public synchronized void run()
2、同步**塊
為了防止上鎖範圍過大,採用同步塊鎖住需要上鎖的部分,obj為鎖物件,一般使用共享資源。
synchronized(obj)
3、lock物件同步鎖
與共享物件一對一存在。
// 顯示定義lock同步鎖物件,此物件與共享資源具有一對一關係
private final lock lock = new reentrantlock();
public void m()
4、wait(),notify(),notifyall()執行緒間通訊
wait() 使當前物件阻塞,不釋放資源。直到其它執行緒呼叫該同步鎖物件的notify()或者notifyall()方法喚醒此執行緒。
notify() 擇一喚醒在該同步鎖外等待的執行緒,此時當前執行緒並未釋放資源,會繼續執行。
notifyall() 喚醒在該同步鎖外等待的所有執行緒,此時當前執行緒並未釋放資源,會繼續執行。
該部分參考自:
java多執行緒
在網上看到很有意思的問題,摘下來好好看下 在面試的時候被問了乙個多執行緒的問題 回來仔細思考了一下,多執行緒是否真的能提高了效率?我對多執行緒的理解就是 比如挖乙個隧道,有2種開工方法 1 只在山的一頭挖,直至挖到山的另一頭,從而打通隧道,這可以看成是單執行緒 2 在山的兩頭挖,同時開工,最後在山的...
Java 多執行緒
1。thread類和runnable介面 2。主線程 用thread的static thread currentthread 方法獲得 3。通過實現runnable介面建立執行緒 實現runnable介面的run方法。新執行緒在run 方法返回時結束。注意用這種方法建立程序時,在實現runnable...
JAVA 多執行緒
為hashmap的不正確使用所導致。hashmap在多執行緒環境下使用不安全。使用靜態hashmap作為聯絡人資料快取,key為手機號碼.private static maplxrdata new hashmap 多執行緒環境下不同步hashmap可能導致如下問題 1 多執行緒put操作後可能導致g...