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

Posted 09120912zhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程安全-----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   此关键字使用的时候, 应该把同步  区域尽可能的缩小,主要针对那些可变的状态变量。

 

以上是关于线程安全-----Synchronize的使用的主要内容,如果未能解决你的问题,请参考以下文章

Synchronize深入

多线程2-synchronize

线程基础四

多线程-6

对volatile的认识

java多线程中synchronize锁的使用和学习,Thread多线程学习