我有一个问题,我需要在 java 中同步对整数数组的访问。我的代码看起来像这样。
Class X {
int[] counters = new int[100];
Object lock = new Object ();
void increment (int idx){
synchronized (lock){
++counters[idx];
}
}
void print(){
StringBuffer buf = new StringBuffer ();
synchronized (lock){
for( int i=0; i<100; i++;){
buf.append(",");
buf.append(counters [i]);
} //End for
}//End synchronized
System.out.println(buf.toString());
}
}
目前我正在使用单锁来同步对整数数组的访问。但我想为每个计数器使用一个锁。
所以我将代码修改为如下所示。
Class X {
int[] counters = new int[100];
Object[] locks = new Object[100];
static{
for(int i=0;i<100;i++){
locks [i] = new Object ();
}
}
void increment (int idx){
synchronized (locks[idx]){
++counters[idx];
}
}
void print(){
StringBuffer buf = new StringBuffer ();
for( int i=0; i<100; i++;){
buf.append(",");
synchronized (lock[i]){
buf.append(counters [i]);
}//End synchronized
} //End for
System.out.println(buf.toString());
}
}
但是我的同事建议我使用 AtomicInteger 而不是同步块。
AtomicInteger 是否与同步块具有相同的效果?
哆啦的时光机
相关分类