码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-01-24 11:55:14      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:tran   针对   可重入锁   程序   read   pack   不可   问题   string   

主要讲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的使用

标签:tran   针对   可重入锁   程序   read   pack   不可   问题   string   

原文地址:https://www.cnblogs.com/09120912zhang/p/10313338.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!