Java多執行緒

2021-07-16 03:59:03 字數 1492 閱讀 3831

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...