public class Test{
    public static int CONST1 = 0 ;    public static void setConst1{
        CONST1 = 2;
    }
}假设上面这个类是运行于多线程环境中,那么对setConst1方法需要加锁么?

解决方案 »

  1.   

    synchronzied同步关键字来修饰你的方法!!
      

  2.   

    你可以使用synchronzied修饰你的方法或者定义一个静态的对象来保证lock
    public class Test{
        public static int VAR = 0 ;
        private static Object lock = new Object();    public static void methodA(){
           synchronzied(lock) {
             ...
           }
        }
    }
      

  3.   

    我认为对java基本类型的操作是一个原子操作(float、double类型除外),如果是这样,为什么还需要对这个方法进行加锁呢?
      

  4.   

    如果没有记错的话,effectiv java 里还是哪本书里提了一把,native类型的可以理解为原子操作啊
      

  5.   

    如果只是赋值当然没有问题,但是如果需要超过一步的操作就有问题了

        public static void methodA(){
             if(VAR > 10)
                 VAR = 0;
             VAR++;
        }
    这样一个代码就存在明显的线程同步问题