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

  • 相关阅读:
    Java数据库小项目02--管家婆项目
    Java数据库小项目01--实现用户登录注册
    Java数据库小项目00---基础知识
    MySQL基础练习02---牛客网
    ICMP
    语法糖
    双绞线
    telnet 时代的 bbs
    ARPA
    IEEE802是一个局域网标准系列
  • 原文地址:https://www.cnblogs.com/09120912zhang/p/10313338.html
Copyright © 2011-2022 走看看