StaticThreadTest st = new StaticThreadTest();
StaticThreadTest st1 = new StaticThreadTest();
st.threadNew.start();
st1.incrementer.start();
synchronized (StaticThreadTest.class) {...}
在第1段中,不同的线程在不同的类实例上运行。在第2段同步发生在Class本身。据我们了解,如果Class.class在同步块中,那么所有线程都应该只有一个Class
对象实例。并且它与第1段中不同实例概念的不同线程相矛盾。
请帮助我知道,这实际上是如何运作的?
答案 0 :(得分:3)
synchronized
块将阻止两个线程同时运行代码,只要两个块在同一对象上同步即可。
相反,第二个线程将等待第一个线程完成。
如果您对Something.class
字面值进行同步,则可以保证使用相同的实例,因为X.class
将始终具有相同的值。