从同步块返回同步值

时间:2014-11-02 17:52:16

标签: java multithreading

如果我有一个对象地图,并且每个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失真?

1 个答案:

答案 0 :(得分:1)

不,sum是一个局部变量。每个线程都有自己的副本。

synchronized块之外声明它并不会使它变成局部变量,它只会使其范围更大。