執行緒3 執行緒安全

2021-09-11 11:01:19 字數 2392 閱讀 8472

public

class

resource

else

x++; x = x %2;

}}}class

getimplements

runnable}}

public

static

void

main

(string[

] args)

}

1. 多個執行緒

2. 修改公共的資源,變數

3. 多行**(非原子性操作)

1. synchronized

2. lock

3. 原子類atomic

1.  死鎖: 一人一根筷子 (jconsole 檢測死鎖 工具,cmd開啟)

2. 飢餓: 執行緒優先順序,有的人餓死

* 高優先順序搶占低優先順序的cpu時間片(設定合理優先順序)

* 同步**塊,低優先順序永久阻塞在等待進入**塊的狀態(永久等待)(使用鎖代替,synchronized)

* 等待wait執行緒,永遠不會喚醒

3. 活鎖: 過獨木橋互相謙讓

1. 多執行緒並不一定快,不一定多核

2. 執行緒切換,切換上下文(浪費cpu資源),相當於翻譯

耗時的,但是能保證執行緒安全

同步**塊

1. synchronized(物件)

2. 每個物件有個標識位 1(開) 0(關)

3. 引數物件起到了 鎖的作用,我們通常叫他 物件鎖

4. **塊,在synchronized的**塊叫做,同步**塊

同步方法

1. 在方法前面加:public synchronized void sell(){} 同步方法

2. 普通方法:同步方法的物件鎖是this: 代表當前物件

3. 靜態方法:同步方法的物件鎖是 當前類!eg:singleton.class== 物件.getclass()

單列模式

構造方法私有

提供getinstance方法返回,當前類的唯一例項

public

class

singleton

// 單例模式: 惡漢

private

static singleton instance2 =

newsingleton()

;// 公共的資源

public

static singleton getinstance2()

// 單例模式: 懶漢

private

static

volatile singleton instance;

// volatile 防止指令重拍

public

static singleton getinstance()

}}return instance;

}}

死鎖

原因:鎖的巢狀!!!多個執行緒相互把持鎖,互不相讓

public

class

deadlock

implements

runnable

@override

public

void

run()}

}else}}

}public

static

void

main

(string[

] args)

}

售票

1. void lock() 

獲取鎖。

2. void lockinterruptibly()

如果當前執行緒未被中斷,則獲取鎖。

3. condition newcondition()

返回繫結到此 lock 例項的新 condition 例項。

4. boolean trylock()

僅在呼叫時鎖為空閒狀態才獲取該鎖。

5. boolean trylock(long time, timeunit unit)

如果鎖在給定的等待時間內空閒,並且當前執行緒未被中斷,則獲取鎖。

6. void unlock()

釋放鎖。

非同步多執行緒 3 多執行緒安全

多執行緒去訪問同乙個集合,一般沒問題,執行緒安全問題一般是出在同時修改乙個物件的時候。執行緒安全問題 一段 單執行緒執行和多執行緒執行,結果不一致。例如這個方法,很簡單,迴圈開啟task往乙個list裡add,等3秒鐘執行完後列印出來list的長度,如果是單執行緒,肯定是10000,現在看看多執行緒...

執行緒同步 執行緒安全

1 執行緒同步 1 同步 多程序或者多執行緒訪問臨界資源時,必須進行同步控制。多程序或者多執行緒的執行並不完全是絕對的並行執行,有可能主線程需要等待函式執行緒的某些條件的發生。2 多執行緒之間有幾個特殊的臨界資源 全域性資料 堆區資料 檔案描述符 多執行緒之間共用 3 執行緒間同步控制方式 a.訊號...

多執行緒 執行緒安全

原因 當多個執行緒同時共享,同乙個全域性變數或靜態變數。做寫的操作時,可能發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。解決方案 方式一 內建鎖synchronized synchronized保證執行緒原子性,當執行緒進入方法的時候,自動獲取鎖,一旦鎖被其它執行緒獲取...