我在org.mortbay.util.ajax包的jetty-util的JSON类中发现了这样一个奇怪的代码,并且想知道这是否是错误。
我唯一的猜测是从内存中读取_deafult
变量,分享大家的想法!
public static String toString(Object object)
{
StringBuffer buffer=new StringBuffer(__default.getStringBufferSize());
synchronized (buffer)
{
__default.append(buffer,object);
return buffer.toString();
}
}
最佳答案
看起来确实毫无意义-buffer
实例是在线程内直接构造的,因此没有其他线程可以引用它。因此,synchronized
块将始终处于无竞争状态,因此不会保护任何内容,并且以后不会再有其他线程对其进行同步,因此没有内存一致性影响。
根据预期的语义,这可能是错误,也可能只是重构所遗留的怪癖而不会引起任何问题。 (由于正确性,它等同于根本不同步,就性能而言,它仅稍差一些。)
从好的方面来说,Java 6中的Hotspot将优化此块。 :-)