Java中静态变量的线程安全

Java中静态变量的线程安全

本文介绍了Java中静态变量的线程安全的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题与静态变量的线程安全性有关.

My question is related to thread safety of static variables.

Class A{
private static int test=0;
public static void synchronized  m1(){
    test=test+1;
}
public void synchronized  m2(){
   test=test+1;
}

}

可能是,我缺少一些非常基本的内容,但不确定其工作原理.

May be , I am missing something very basic, but not sure how it works.

推荐答案

这不是线程安全的.这些方法使用不同的监视对象:静态方法使用类,实例方法使用对象实例进行同步.您可以通过以下方式使实例方法将类用作监视对象:

This is not thread safe. The methods use different monitor objects: the static method uses the class, and the instance method synchronizes using the object instance. You can make the instance method use the class as the monitor object by:

synchronized (A.class) {
...

如果需要的话.我会考虑将两种方法都设为静态,除非您需要访问实例变量.

if you need to. I'd consider making both methods static though, unless you need to access instance variables.

这篇关于Java中静态变量的线程安全的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-29 19:32