StringBuffer類具有線程安全的方法嗎?好的,但我有問題,當特定的方法將被調用,然後它將被加載到堆棧和堆棧是線程安全的,爲什麼我們需要線程安全的方法?線程安全方法和堆棧
1
A
回答
3
它很可能跨越不同的線程在這種情況下,多個線程最終將「改性」或突變該StringBuffer
的內部狀態共享一個給定StringBuffer
實例。這就是爲什麼需要明確同步StringBuffer
上的append
方法。
但你說得對。如果你不打算在線程邊界之間共享東西(或者像他們稱之爲「發佈」實例),那麼在給定的方法調用中創建一個StringBuilder
實例(這是StringBuffer
的非同步兄弟)更合乎邏輯並在方法調用結束後將其扔掉(或者更像是讓GC處理它)。
還有另一個方面,當你絕對必須在線程間共享實例並同時感覺同步每個操作的代價太大時 - 線程本地人才會發揮作用。基本上,這種情況下的想法是讓每個線程擁有自己的「可變」實體副本。不需要任何鎖定,因爲當其他線程嘗試訪問線程局部變量時,您將切換到新的/預先配置的實例。這通常用於共享StringBuilder
和DateFormat
實例,以提高性能。
如果您想比較線程間可變對象的原始/不安全共享與使用本地線程之間的比較,請查看snippet I have hosted on Bitbucket。
相關問題
- 1. 安全線程堆棧大小?
- 2. 線程池堆棧安全問題
- 3. 線程堆和堆棧
- 4. 繪製堆棧和線程程序堆
- 5. 線程安全的方法
- 6. Java方法線程安全
- 7. 線程安全方法?
- 8. 靜態方法和線程安全
- 9. Java靜態方法和線程安全
- 10. 靜態方法和線程安全
- 11. 線程安全類和方法參數
- 12. 類方法和線程安全(NSJSONSerialization)
- 13. 線程安全和方法參數
- 14. 類型安全堆棧和Scala 2.10
- 15. 堆棧安全展開
- 16. 我的簡單線程安全堆棧有什麼問題?
- 17. 您何時想要使用線程安全堆棧?
- 18. 如何使對象(一個可變堆棧)線程安全?
- 19. 線程安全的服務堆棧Redis連接
- 20. 線程堆棧和進程堆棧有什麼區別
- 21. 具有MEAN堆棧的安全路線和模板?
- 22. POSIX線程堆棧內存 - 我們可以有不同的堆棧大小和安全問題嗎?
- 23. Python堆棧溢出tkinter和線程
- 24. QTimer線程安全的方法'isActive()'?
- 25. 線程安全的Dispose方法?
- 26. Ruby類方法是否線程安全?
- 27. 方法參數線程安全嗎?
- 28. 是靜態方法線程安全
- 29. 靜態方法的線程安全
- 30. IntentService的onStartCommand(..)方法線程安全嗎?