何時同步變量?
回答
如果它只能被一個線程訪問,則不需要同步它。
如果要保護變量免受多線程同時更新的影響,您應該在多線程環境中進行同步。
同步化的原因是一段代碼可能被多個線程訪問。使用以下內容,
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