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

  • 相关阅读:
    How to Change Error Message Colors in Windows 10 PowerShell Console
    How to expand Azure VM OS Disk
    Ubuntu terminal colors
    Docker proxy
    如何对mRemoteNG在进行Linux终端访问时自定义配色
    100阶乘末尾有多少个零
    几道c/c++练习题
    M-BM-
    从FGUI中取一张图片并返回一个Sprite
    为什么手游选择lua热更新方案。
  • 原文地址:https://www.cnblogs.com/09120912zhang/p/10313338.html
Copyright © 2011-2022 走看看