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

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

       JVM中的區域主要分爲五部分安全

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

                               線程共享:  java堆、方法區spa

        所謂的線程安全針對的就是線程共享區域,今後處咱們獲得一個結論:無狀態的類是線程安全的,由於不存在線程共享一說。線程

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

  

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   此關鍵字使用的時候, 應該把同步  區域儘量的縮小,主要針對那些可變的狀態變量。對象

相關文章
相關標籤/搜索