2 回答

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

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