多執行緒之執行緒安全
阿新 • • 發佈:2020-08-05
一、執行緒安全
如果有多個執行緒在同時執行,而這些執行緒可能會同時執行這段程式碼。
程式每次執行結果和單執行緒執行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是執行緒安全的。
執行緒安全問題都是由全域性變數及靜態變數引起的。
若每個執行緒中對全域性變數、靜態變數只有讀操作,而無寫操作,一般來說,這個全域性變數是執行緒安全的;
若有多個執行緒同時執行寫操作,一般都需要考慮執行緒同步,否則的話就可能影響執行緒安全。
二、執行緒同步
java中提供了執行緒同步機制,它能夠解決上述的執行緒安全問題。
執行緒同步的方式有兩種:
方式1:同步程式碼塊
方式2:同步方法
1、同步程式碼快:
同步程式碼塊: 在程式碼塊宣告上 加上synchronized
synchronized (鎖物件) { 可能會產生執行緒安全問題的程式碼 }
同步程式碼塊中的鎖物件可以是任意的物件;但多個執行緒時,要使用同一個鎖物件才能夠保證執行緒安全。
2、同步方法
1)同步方法:在方法宣告上加上synchronized
public synchronized void method(){ 可能會產生執行緒安全問題的程式碼 }
同步方法中的鎖物件是 this
2)靜態同步方法:在方法宣告上加上static synchronized
public static synchronized void method(){ 可能會產生執行緒安全問題的程式碼 }
靜態同步方法中的鎖物件是 類名.class
三、Lock介面
Lock實現提供了比使用 synchronized方法和語句可獲得的更廣泛的鎖定操作。
Lock介面中的常用方法