代码之家  ›  专栏  ›  技术社区  ›  pls

JSON奇怪的同步源代码

  •  0
  • pls  · 技术社区  · 14 年前

    我在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();
            }
        }
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Andrzej Doyle    14 年前

    看起来真的毫无意义 buffer 实例是在线程内构造的,因此其他线程可能都没有对它的引用。因此 synchronized 阻止意志 总是 无争用,因此不保护任何东西,加上以后没有其他线程会在其上同步,因此没有内存一致性影响。

    根据预期的语义,这可能是一个错误,也可能只是重构过程中遗留下来的一个怪癖,不会导致任何问题。(因为就正确性而言,它相当于完全不同步,而就性能而言,它只差一点点。)

    另一方面,Java 6中的Hotspot将优化这个块。:-)

        2
  •  2
  •   T.J. Crowder    14 年前

    我想说他们打算写的几率很高 synchronized (__default) 而不是 synchronized (buffer) . 这是为了避免 __default 在呼叫期间 append (假设它们也在其他地方同步,当进行更改时,或者它的mutator函数同步-您还没有提到 __违约 是的,这并不重要。我看不出任何同步的原因 buffer .