何时同步变量?

时间:2011-05-17 16:15:45

标签: java

我应该何时同步变量?

我认为它只会被一个线程访问;这是否意味着我不需要同步它?

synchronized(variableName){

}

4 个答案:

答案 0 :(得分:6)

如果它只能由一个线程访问,则不需要同步它。

当您希望保护变量不受多个线程的同步更新时,您应该在多线程环境中进行同步。

答案 1 :(得分:1)

根据您的代码段, 上进行同步 variableName并且您没有同步variableName。这之间有很多不同。如果您想保护variableName,那么应该在synchronized块中访问该synchronized(syncVar){ variableName = /* some operation which will modify the state of variableName */ } 。像这样:

syncVar

此处variableName是您要同步和保护{{1}}同时访问的变量。

此外,如果只有一个线程可以访问该变量,则无需同步。它可能会受到性能影响。

答案 2 :(得分:0)

同步的原因是多个线程可以访问代码块。使用以下内容,

synchronized(whateverObject)
{ //...
 // code to be accessed by one thread here...
}

确保只有一个线程访问代码块。所有其他线程将阻塞,直到第一个线程完成它。

除非代码是多线程的,否则无需使用synchronized关键字。

答案 3 :(得分:0)

如果考虑到性能,我最近阅读:

void synchronized method() {
...
}

比以下更快:

void method() {
    synchronized (this) {
    ...
    }
}

在当前的JVM中。 YMMV