如果我在同一个类上同步两个方法,它们可以同时运行吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (48)

如果我在同一个类上同步两个方法,它们可以同时在同一个对象上运行吗?例如:

class A {
    public synchronized void methodA() {
        //method A
    }

    public synchronized void methodB() {
        // method B
    }
}

但是,我仍然可以在不同的线程上同时运行methodB()和methodA()吗?

提问于
用户回答回答于

如果你有两种不同的方法,标志着同步线程进入他们将争夺同一个锁,一旦一个线程都获得锁其他线程将被关闭在同一个锁上同步的所有方法。所以为了使这两种方法同时运行,他们必须使用不同的锁,如下所示:

class A {
    private final Object lockA = new Object();
    private final Object lockB = new Object();

    public void methodA() {
        synchronized(lockA) {
            //method A
        }
    }

    public void methodB() {
        synchronized(lockB) {
            //method B
        }
    }
}
用户回答回答于

你不能同时在不同线程的同一个对象上执行它们(两个方法中的一个会阻塞,直到另一个完成)。

所属标签

可能回答问题的人

  • gulu丶咕噜

    0 粉丝1 提问5 回答
  • 华讯云

    0 粉丝0 提问4 回答
  • EatRice

    16 粉丝0 提问4 回答
  • 发条丶魔灵1

    9 粉丝526 提问3 回答

扫码关注云+社区

领取腾讯云代金券