7 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個贊
你開車需要系安全帶,騎摩托車需要帶頭盔,但是并不代表你在家睡覺也要系安全帶帶頭盔(當(dāng)然你不嫌麻煩也可以這么干)。
在單線程環(huán)境下(~在家睡覺~),你可以使用線程安全或者非現(xiàn)場安全的類,但是非現(xiàn)場安全的類通常性能更高,且在單線程情況下也不存在安全問題。
在多線程的情況下(~開車騎摩托車~),你必須犧牲性能,用線程安全的類。

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個贊
因?yàn)槭褂脠鼍坝胁l(fā)和非并發(fā)的區(qū)別。如果非得需要解決線程安全問題,比如集合類,它又提供了一個集合的工具類實(shí)現(xiàn)同步。個人理解,先追求速度,這能給用戶帶來體驗(yàn),安全性如果需要就還可以擴(kuò)展。

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個贊
魚與熊掌不可兼得,線程安全通常都是要加鎖和解鎖的,不但會對設(shè)計(jì)上造成復(fù)雜性(比如要想辦法避免死鎖問題),而且會對性能造成顯著的影響。
而絕大多數(shù)場景下都是單線程同步模型,壓根不用考慮線程安全問題。

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個贊
如果我理解你的問題正確: 為什么不是所有的Collections都是線程安全的?原因有:
- 實(shí)現(xiàn)線程安全是非常困難,如果不是不可能的
- 犧牲性能代價可能很大
- 大多數(shù)應(yīng)用場景下線程安全是不必要的。
所以說,你的問題看起來有點(diǎn)像:“有總比沒有好,用不用是我的事”,答案是:“有不是總比沒有好,有是需要付出代價,而這代價通常你不需要付出或盡量避免的”。因?yàn)镸ap/List/...應(yīng)用的場景通常不需要線程安全的,所以在絕大多數(shù)的情況下HashTable/Vector/...被HashMap/ArrayList/...代替了

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個贊
不線程安全才是默認(rèn)狀態(tài)。如果不特意做些事情,基本上沒有東西是線程安全。所以談不上 "放棄"。
不線程安全不等于沒用,有一些情況是不需要線程安全的,少做這些事的代碼可能更快。
添加回答
舉報(bào)