繁体   English   中英

使用相同 class 的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM