静态变量可以在类的常规成员中更新。假设我们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()在这方面没有帮助。
答案 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();
}