0
    StaticThreadTest st = new StaticThreadTest();
    StaticThreadTest st1 = new StaticThreadTest();
    st.threadNew.start();
    st1.incrementer.start();

    synchronized (StaticThreadTest.class) {...}

第 1 段中,不同的线程在不同的类实例上运行。在第 2 段中,同步发生在 Class 本身上。Class正如我们所了解的,如果 Class.class 位于同步块中,则所有线程都应该只有一个对象实例。它与第 1 段中不同实例概念的不同线程相矛盾。

请帮助我知道,这实际上是如何工作的?

4

1 回答 1

3

synchronized只要两个块在同一个对象上同步,该块就会阻止两个线程同时运行代码。
相反,第二个线程将等待第一个线程完成。

如果您在Something.class文字上同步,则可以保证使用相同的实例,因为X.class将始终具有相同的值。

于 2013-09-03T17:55:53.587 回答