![](/img/trans.png)
[英]Calling a synchronized method from another synchronized method, both on different object
[英]Calling synchronized method with two different references of the object of the same class
我有一个同步方法,我想使用同一个 class 的两个不同实例来调用它。我无法理解这里到底会发生什么。 是否有办法强制这些调用一个接一个地执行?
Code
public class A1 {
public synchronized void m1(){
try{
Thread.sleep(5000);
}catch(Exception e){
}
}
public static void main(String[] args) {
A1 o1 = new A1();
A1 o2 = new A1();
o1.m1();
o2.m1();
}
}
synchronized
关键字将对方法的访问同步到锁定到调用该方法的 object 上。 这意味着在同一个 object 上调用该方法的两个线程将依次执行,而在两个不同的 object 上调用该方法的两个线程将并发执行。
如果你想在后一种情况下同步调用,你可以在两个线程都可以访问的不同的 object 上同步。 这通常是在Class
object 上同步完成的:
public class A1 {
public void m1() {
synchronized(A1.class) {
try {
Thread.sleep(5000);
} catch(final Exception e) {
e.printStackTrace();
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.