2015-09-16 108 views
1

我正在採用算法實現類。我的老師提到了StringBuffer和StringBuilder,他說StringBuffer比StringBuilder更安全,因爲在線程方面。真的嗎?如果是這樣,那是什麼意思?我查了這個問題和許多提到的同步答案。任何人都可以解釋這是什麼意思,以及如何使StringBuffer比StringBuilder更安全?StringBuffer vs StringBuilder

+0

請參閱[什麼是Java中的線程安全](http://stackoverflow.com/q/6324085/4125191) – RealSkeptic

+1

另請注意,這並不意味着您應該更喜歡使用StringBuffer來處理StringBuilder。恰恰相反 - 無論何時在本地使用它,在單個線程中,始終更喜歡'StringBuilder'。只有在需要在線程之間共享字符串構建對象的地方使用'StringBuffer'。 – RealSkeptic

+1

您幾乎從不需要'StringBuffer'的「額外安全性」,它只會帶來額外的性能成本,沒有任何好處。 –

回答

5

StringBuffer已使所有方法同步。

java doc

字符的一個線程安全的可變序列

同步是同步到的代碼部分線程訪問一個系統,使至多一個線程可以執行同步塊。

如果您的代碼不是多線程,或者僅當您使用的StringBuffer未在線程之間共享,請使用StringBuilder。它更快。

從的StringBuilder javadoc

一個可變的字符序列。此類提供與StringBuffer兼容的API ,但與不保證 同步。這個類被設計用作落入式 替代的StringBuffer在地方字符串緩衝區是 正在使用單個線程(如通常是這種情況)。其中 可能,建議這個類優先使用 StringBuffer,因爲在大多數實現中它將更快更快

0

由於所有的它的方法是同步的,這意味着,即使你使用,並在同一時間修改它有100個線程(或更多),這將充分處理其他請求之前執行每個操作。使用StringBuilder你沒有這樣的保證。

相關問題