何时同步变量?
回答
如果它只能被一个线程访问,则不需要同步它。
如果要保护变量免受多线程同时更新的影响,您应该在多线程环境中进行同步。
同步化的原因是一段代码可能被多个线程访问。使用以下内容,
synchronized(whateverObject)
{ //...
// code to be accessed by one thread here...
}
确保代码块将仅由一个线程访问。所有其他线程将阻塞,直到第一个线程完成它。
除非代码是多线程的,否则不需要使用synchronized关键字。
按您的代码段,你是同步上variableName
,你是不是同步variableName
。这有很大的区别。如果要保护variableName
,则应在区块中访问该区域。就像这样:
synchronized(syncVar){
variableName = /* some operation which will modify the state of variableName */
}
这里syncVar
是要在其上同步和保护variableName
从同时访问的变量。
另外,如果只有一个线程访问该变量,则不需要同步。它可能是一个性能问题。
是 - 同步(variableName){ variableName =/*一些操作,它将修改variableName */ } – 2011-05-17 19:00:55
它将工作没有任何错误。但通常我们锁定一个对象并修改另一个对象。 – Bhushan 2011-05-17 19:22:32
如果性能是很高的代价,我最近看了:
void synchronized method() {
...
}
快于:目前的JVM
void method() {
synchronized (this) {
...
}
}
。 YMMV
- 1. 变量的同步
- 2. 同步在本地变量
- 3. 同步变量动作
- 4. 同步于实例变量
- 5. 同步收集的变量
- 6. 同步读取变量
- 7. 同步超时量角器
- 8. 如何在node.js中使用异步回调来同步变量
- 9. 同步本地变量,比同步方法更好?
- 10. Python同时变量增量
- 11. 同步使用跨页变量angularJs
- 12. 布尔变量的线程同步
- 13. java线程全局变量的同步
- 14. Java - 静态变量不同步
- 15. 将类对象作为同步变量
- 16. ng-repeat ng-init变量不同步。
- 17. JavaScript中变量的同步值
- 18. Java:线程间变量的同步
- 19. 访问的变量与不同步
- 20. 同步servlet中的全局变量
- 21. 多个变量在CUDA中同步
- 22. 局部变量的访问 - 同步
- 23. 多处理中的Python同步变量
- 24. Objective-C dataTaskWithRequest填充变量同步
- 25. Unity-Monodevelop变量同步问题
- 26. PHP变量不同步(变量的作用域问题)
- 27. 同步点文件时避免PATH变量冲突?
- 28. 保持变量的值,同时使异步调用FB.api
- 29. NodeJS变量碰撞?与请求异步/同步
- 30. 如何同时生成两个变量?
他说什么。无论多小,锁定仍然会产生开销。所以不要锁定,如果你不需要。这当然没有理由在多线程中避免它;) – Mr47 2011-05-17 16:19:43
好吧,但是如果只有一个线程可以在任何时候运行,那么两个线程怎么能够同时访问同一个变量呢? – 2011-05-17 17:46:50
两个或多个线程可以同时运行,这是多线程的整体概念。 – Marcelo 2011-05-17 17:48:19