[英]Is String.intern() thread safe
我想在Java中使用String.intern()來節省內存(使用內部池來獲取具有相同內容的字符串)。 我從不同的線程調用此方法。 這是個問題嗎?
對你的問題的簡短回答是肯定的。 它是線程安全的。
但是,您可能需要重新考慮使用此工具來減少內存消耗。 原因是您無法從實習字符串列表中刪除任何entires。 更好的解決方案是為此創建自己的設施。 您只需將字符串存儲在HashMap<String,String>
如下所示:
public String getInternedString(String s) {
synchronized(strings) {
String found = strings.get(s);
if(found == null) {
strings.put(s, s);
found = s;
}
return found;
}
}
返回不可變的Java-String時,該方法是線程安全的。 您無法按原樣操縱String。
文檔確實表明它是線程安全的。 (通過強調任何 )
因此, 對於任何兩個字符串s和t,當且僅當s.equals(t)為真時,s.intern()== t.intern()才為真。
jobject
秒。 jstring
是其中之一,並且根據定義,所有jobject
都是不可變的。 因此,在本機c級別上,我們也保留了線程安全性。 命名這些,我們有充分的理由說它是線程安全的。
PS:但是,如果使用多個類加載器,最終可能會遇到挑戰性的結果,因為String-pool是按String-class
維護的。
A pool of strings, initially empty, is maintained privately by the class String.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.