Day66.練習5 -Java多執行緒

轉行一點成功發表於2020-10-09

1. 畫圖說明執行緒的生命週期;以及各狀態切換使用到的方法

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-fcxwLWJO-1602245299161)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201009185933411.png)]

2. 同步程式碼塊中設計到同步監視器和共享資料,談談你對同步監視器和共享資料的理解,以及注意點。

同步監視器是一個物件,相當於鎖,哪個執行緒獲得同步監視器就相當於拿到了鎖,他就進入了程式碼塊中去執行,沒有鎖的執行緒只能等待,獲得鎖的執行完再進行被分配鎖,對於多個執行緒,他在同步程式碼塊中鎖必須保證是唯一的,且要避免死鎖的情況發生;

共享資料就是被多個執行緒共享操作的資料,他會因為同步問題出現執行緒安全問題。需要用到同步方法來進行同步。防止出現執行緒安全問題。

synchronized(同步監視器){
	//操作共享資料的程式碼
}

3. sleep()和wait()區別

相同點: 都可以使一個執行緒進入阻塞狀態

不同點: sleep(): 會自動釋放同步監視器;sleep()只能使用與介面Thread類下。

​ wait(): 不能自動釋放同步監視器,需要呼叫notify()來釋放同步監視器;wait()則是實現java.lang.Object下,可在任何情況下使用。

4. 寫一個執行緒安全的懶漢式

public class Singleton{

	private static Singleton instance;
	
	private Singleton(){}
    
    public static synchronized Singleton getInstance(){
        if(instance == null){
            Singleton instance = new Singleton();
            
        }
        return instance;
    }

}

5. 建立多執行緒的方式有幾種?

4種;

Thread類繼承;

Runnable介面實現;

Callable介面實現;

執行緒池(響應速度提高,提高了資源的重複率,便於管理)

相關文章