1. 程式人生 > 實用技巧 >多執行緒之執行緒安全

多執行緒之執行緒安全

一、執行緒安全

  如果有多個執行緒在同時執行,而這些執行緒可能會同時執行這段程式碼。

  程式每次執行結果和單執行緒執行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是執行緒安全的。

  執行緒安全問題都是由全域性變數及靜態變數引起的。

  若每個執行緒中對全域性變數、靜態變數只有讀操作,而無寫操作,一般來說,這個全域性變數是執行緒安全的;

  若有多個執行緒同時執行寫操作,一般都需要考慮執行緒同步,否則的話就可能影響執行緒安全。

二、執行緒同步

  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介面中的常用方法