2 回答

TA貢獻1825條經驗 獲得超6個贊
面試官問我在單線程環境中使用像 Hashtable 這樣的線程安全類的缺點?
盡管大多數缺點都與性能有關,但還是有的。即使是單線程環境中也有多個線程(想想 GC、終結器、信號處理程序、JMX 等),因此該語言仍然需要遵守同步結構,例如synchronized
,volatile
和本機鎖實現。這些語言特性會刷新或使內存緩存無效并影響代碼重新排序,這兩者都會顯著影響整體運行時性能。
如果不是那么為什么后面會引入非線程安全類?
在單線程或多線程應用程序中,非線程安全對象的性能總是比線程安全對象好。處理本地 CPU 緩存內存的能力是現代硬件提供的主要速度提升之一。如果您不必接觸主內存總線,則可以更快地執行操作數個數量級。同步結構降低了使用高速緩存的能力。
最后,線程安全類通常在所涉及的數據結構以及它們在多線程應用程序中正確運行所需的邏輯方面都更加復雜。這意味著即使我們忽略同步結構,它也可能使用更多內存并且運行速度更慢,盡管這種情況的程度很大程度上取決于所討論的特定類

TA貢獻1895條經驗 獲得超3個贊
它們在單線程環境中速度較慢?,F代 JIT 在單線程環境中使用同步類非常有效,但并不完美。
它們在多線程環境中要慢得多。如果您有不可變的集合,您可以安全地從不同的線程使用,但同步集合的工作速度會慢得多。
[設計] 它的鎖定語義大多是無用的,所以無論如何都需要額外的同步。你很少只需要讀或寫,大多數時候你先讀然后寫,你希望它是原子的?;蛘吣朐试S多個同時讀取。
添加回答
舉報