zoukankan      html  css  js  c++  java
  • java static静态方法的并发性

    在做一个web项目的时候需要做一个通用类去处理一些问题,想到这个类很多地方都有用到,又不想每次都new一个,因此就定义了里面的方法是静态方法,然后又因为多个静态方法都用到了同一个对象,结果定义了一个类的全局变量让每个静态方法去调用它,刚开始没什么问题,后来项目上线没多久就挂了,最后发现这样做导致了多线程的并发问题,所以就想在这里记录一下…

    下面是一个例子,例如:

    public class TestUtil {
    
        private static User user=new User();
    
        public static void setName(String name){
            //在静态方法中调用了全局变量并进行了修改操作,线程不安全
            user.setUsername(name);
        }
    
        public synchronized static void setName1(String name){
            //在静态方法中调用了全局变量并进行了修改操作,使用了同步关键字,线程安全
            user.setUsername(name);
        }
    
    }

    总结:只要你的静态方法不访问全局变量的话,就不会有并发问题

    访问全局变量肯定会出现并发问题,这是毫无疑问的 
    静态方法内部的变量,都是局部变量,每次调用静态方法时都会重新分配内存空间,所以是安全的

    也就是是说只要你的静态方法不访问全局变量的话,就不会有并发问题

  • 相关阅读:
    python 3 dict函数 神奇的参数规则
    python 3 黑色魔法元类初探
    私有变量为何传给了子类?
    [转]django-registration quickstart
    DoesNotExist at /account/
    DoesNotExist at /admin/
    setting.py
    Python excel 奇怪的通信规则
    Python 一个奇特的引用设定
    Chrome 内存和CPU消耗量双料冠军
  • 原文地址:https://www.cnblogs.com/-ROCKS/p/6108490.html
Copyright © 2011-2022 走看看