类变量的可见性

时间:2017-03-31 09:03:59

标签: java multithreading static synchronization thread-safety

静态变量可以在类的常规成员中更新。假设我们private static int counter;相应public void countMore(){counter++;}的情况。现在,如果我们有两个同一类的2个不同对象的线程,并且在这两个对象上调用方法countMore(),我们如何保证类静态变量计数器的可见性?

修改

注意:

当我们有两个帖子时

 Thread thread1 = new Thread(new SomeClass()) 
 Thread thread2 = new Thread(new SomeClass())
 thread1.start();
 thread2.start();

同步实例方法countMore()在这方面没有帮助。

1 个答案:

答案 0 :(得分:1)

胶水代码的可能解决方案

//You should make the counter fiels private so noone can ignore the synchronized

//Solution 1 synchronized
private static int counter;

static synchronized void countMore(){
    counter++;
}

static synchronized int getCount(){
    return counter;
}

//Solution 2 Atomics
private static AtomicInteger acounter;

static void acountMore(){
    acounter.addAndGet(1);
}

static int getaCount(){
    return acounter.get();
}