我有一个类有三种方法m1,m2和m3。方法m1,m3是同步的。
创建了三个线程,比如说t1,t2和t3。
这里的问题是 如果t1正在访问m1方法并且同时可以t2访问m3方法? (m1和m3方法都是同步的。)
我没有代码。在我最近的采访中面对这个问题。
答案 0 :(得分:0)
如果m1和m3都是实例方法而不是静态的:
这取决于t1和t2是否共享同一个类的对象。如果它们共享同一个对象,则t1和t2不能同时调用同步方法。否则,如果t1和t2具有类对象的不同副本,则可以同时调用m1和m3,因为它们是2个不同的对象。
但是,如果m1和m3都是静态的: 没有2个线程可以同时调用它们。这是因为,静态方法在YourClass.class对象上同步,该对象由该类的所有实例共享。因此,多个线程无法同时访问它的同步方法/块。