org.osgi.framework.Version.toString()
方法已知会导致性能问题(详见Bug 324331 - redundant Strings created from Version.toString)。为了解决这个问题,该方法已经做了更改,现在采用延迟初始化和数据竞争(可能是为了提高性能)。
// OSGi Service Platform Release 4 Version 4.3 Core Companion Code
public String toString() {
if (versionString != null) {
return versionString;
}
int q = qualifier.length();
StringBuffer result = new StringBuffer(20 + q);
result.append(major);
result.append(SEPARATOR);
result.append(minor);
result.append(SEPARATOR);
result.append(micro);
if (q > 0) {
result.append(SEPARATOR);
result.append(qualifier);
}
return versionString = result.toString();
}
我认为这段代码不是线程安全的,因为
versionString
字段的读取可能会被重新排序,使得方法返回null
值。我是否正确?或者说这没关系,因为只有在适当同步的情况下才会调用它?根据JLS第17章关于并发性的作者之一Jeremy Manson在这篇博客文章中的说法,实际上可能会发生这种情况。