2014-11-05 43 views
6

我需要替換字符串中的某些字符: 每個DOT到下劃線。使用Guava CharMatcher作爲一個類的靜態字段。 CharMatcher線程安全嗎?

只需做:myString.replace(".","_"); 哪些工作。

但是,我想使用Guava的CharMatcher,它應該具有更好的性能。

CharMatcher dotCharMatcher = CharMatcher.anyOf("."); 
dotCharMatcher.replaceFrom(myString, "_"); 

它運行在有許多線程的服務器上。

我可以在使用它的類中創建dotCharMatcher靜態字段,還是應該在每個請求中創建一個靜態字段? (它是線程安全的?)

感謝

回答

6

是的,inspection of CharMatcher.java,從anyOf返回的實例是線程安全的。

然而,Guava's string utilities, explained文件明確指出,JoinerSplitter是線程安全的,但不會使CharMatcher相同要求。

+1

[Javadoc也提到](https://github.com/google/guava/blob/fa95e381e665d8ee9639543b99ed38020c8de5ef/guava/src/com/google/common/base/CharMatcher.java#L34)_「強烈鼓勵實現是無副作用和不可變的。「_ – Xaerxess 2014-11-05 13:44:33

+0

而且,靜態的」CharMatcher「常量必須是線程安全的,所以在它們的構造中使用的任何東西都必須是線程安全的。 – Joe 2014-11-05 14:14:52