[英]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.