了解有关同步类本身的更多信息

时间:2013-09-03 17:53:38

标签: java multithreading synchronization

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

    synchronized (StaticThreadTest.class) {...}

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

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

1 个答案:

答案 0 :(得分:3)

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

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