線程安全-----Synchronize的使用


主要講synchronize兩部分問題   1.可重入鎖, 2.synchronize區域的合理使用。

       JVM中的區域主要分為五部分

                              線程私有    虛擬機棧、本地方法棧、程序計數器

                               線程共享:  java堆、方法區

        所謂的線程安全針對的就是線程共享區域,從此處我們得到一個結論:無狀態的類是線程安全的,因為不存在線程共享一說。

   1.可重入鎖: java中對於每個鎖都關聯一個計數值和對應的線程,初始計數值為0, 線程獲取此鎖,計數值+1, 線程離開此鎖計數值-1.當計數值為0,其它線程才可以獲取此鎖。

  

package com.ThreadSafe;

/**
 * 可重入鎖
 * 如果鎖不可重入, 那么下面代碼會產生死鎖
 * 最終鎖住的對象都是子節點對象
 */
public class reEntrantLock {

    public  synchronized  void doSomething() {
        System.out.println(this);
    }

    public static void main(String... args) {

        new reSonLock().doSomething();

    }

}

class reSonLock extends reEntrantLock {

    public  synchronized  void doSomething() {
        System.out.println(this);
        super.doSomething();
    }



}

 

    

 2. synchronize   此關鍵字使用的時候, 應該把同步  區域盡可能的縮小,主要針對那些可變的狀態變量。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM