线程安全-----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   此关键字使用的时候, 应该把同步  区域尽量的缩小,主要针对那些可变的状态变量。对象

相关文章
相关标签/搜索