我应该何时同步变量?
我认为它只会被一个线程访问;这是否意味着我不需要同步它?
synchronized(variableName){
}
答案 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