java static静态方法的并发性

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

下面是一个例子,例如:python

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); } }

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

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

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

相关文章
相关标签/搜索