如果我有一个对象地图,并且每个threads
可以同时进入每个buckets
,从而产生一个像
syncrhonized(values.get(ObjectToLock)){
int sum = 0;
for(int i = 0; i< new Random().nextInt(1000)+2; i++)
sum+=i;
return sum;
}
更新
syncrhonized(values.get(ObjectToLock)){
int sum = 0;
for(int i = 0; i< new Random().nextInt(1000)+2; i++)
sum+=i;
for(int i = 0; i < 10; i++)
for( int j = 0; j < 10 ; j++)
System.out.println(*);
return sum;
}
在这段代码中,每个线程都会干扰它们,导致sum
失真?
答案 0 :(得分:1)
不,sum
是一个局部变量。每个线程都有自己的副本。
在synchronized
块之外声明它并不会使它变成局部变量,它只会使其范围更大。