回答
當可能有多個線程同時處理同一數據時,需要同步代碼。
代碼是否需要同步並不是您可以通過單元測試發現的東西。當程序是多線程的時候,你必須仔細思考和設計程序以避免問題。
關於Java併發編程的一本好書是Java Concurrency in Practice。
這是一些一般信息的很好來源: http://weblogs.java.net/blog/caroljmcdonald/archive/2009/09/17/some-java-concurrency-tips
當你在用Java多線程環境中,你想要做的並行很多事情,我會建議使用它使用併發隊列的方法(如BlockingQueue或ConcurrentLinkedQueue)實現以及一個簡單的Runnable,該Runnable具有對隊列的引用並且拉取隊列的「消息」。使用ExecutorService來管理任務。排序的一個(非常簡化)演員類型的模型。
因此,儘可能選擇不共享狀態,因爲如果你這樣做,你需要同步,或者使用像ConcurrentHashMap那樣支持併發訪問的數據結構。
如果我正確理解你的問題,你想知道你必須同步。不幸的是,沒有提供的鍋爐板代碼顯示了要同步的內容 - 您應該看看可以同時由多個線程訪問的方法和實例變量。如果沒有這樣的話,你通常不需要擔心同步太多。
好的答案地塊位置:
Java synchronization and performance in an aspect
你的問題的一個很好的分析,請訪問:
http://portal.acm.org/citation.cfm?id=1370093&dl=GUIDE&coll=GUIDE&CFID=57662261&CFTOKEN=95754288(需要訪問ACM門戶)
有不可替代的思考關於你的代碼的問題(正如這裏的其他答案所示)。一旦你這樣做了,但是值得在代碼上運行FindBugs。它會識別您在哪裏應用同步不一致,並且對跟蹤難以發現的錯誤很有幫助。
是的,所有這些人都是對的 - 沒有其他選擇。但這裏是拇指規則.. 1.如果它的一個閱讀 - 也許你不需要同步 2.如果它的'寫' - 你應該考慮它...
- 1. 如何確定要查看哪些代碼部分?
- 2. 德爾福線程 - 代碼的哪些部分需要保護/同步?
- 3. 如何同步Java代碼
- 4. 幫助需要正確的Java代碼
- 5. 如何確定什麼我的Android應用程序的代碼部分需要哪些權限
- 6. Java:需要幫助優化代碼的一部分
- 7. 如何確定是否需要密碼
- 8. Java線程 - 同步代碼
- 9. 同步(this)只鎖定同步塊還是全部「this」代碼?
- 10. 需要關於Java Vector/ConcurrentModificationException的同步
- 11. 確實BlockingQueue需要同步嗎?
- 12. 如何確保java代碼部分有顯示器
- 13. 如何在兩個不同的git存儲庫之間「部分同步」代碼?
- 14. 將ASP.NET代碼從同步部分遷移到異步/等待
- 15. 如何判斷在java線程中要同步哪個對象?
- 16. 如何確定哪些代碼行參與了Java程序的特定執行?
- 17. 與coredata同步解析數據,我如何確定要刪除哪些對象?
- 18. 此代碼中的哪個位置同步鎖定
- 19. 確定哪個UpdatePanel導致部分(異步)PostBack?
- 20. 我如何確定CPAN分佈的哪些依賴需要編譯器?
- 21. 我是否需要爲此代碼添加同步?
- 22. Eclipse插件可以檢查哪部分代碼需要花費太多時間?
- 23. 同步代碼
- 24. 需要關於Java代碼的幫助
- 25. 需要關於代碼的一部分的幫助
- 26. 我需要跳過我的代碼中的一部分,我不知道如何
- 27. 這段代碼是如何同步的?
- 28. Java。如何正確同步getter和setter?
- 29. 如何防止在java中的同步代碼發生之前?
- 30. 需要循環只有一部分的imacro代碼
+1:設計應該考慮的併發性。你可能不會發現你需要與測試同步的所有地方。相反,你會實現一個系統,傾向於在重負荷下跌倒。 – 2009-10-14 10:10:07
+1表示「不是你可以通過單元測試發現的東西」,儘管你可能通過處理器繁重的測試找到一小部分缺陷。 – 2009-10-14 12:49:52