gpt4 book ai didi

java - 如果我有两个方法不能在不同线程的一个类中同时发生,如何锁定它?

转载 作者:行者123 更新时间:2023-12-01 10:10:58 25 4
gpt4 key购买 nike

如果我有一个类,它有 2 个方法,即 setAsetB,它们具有 synchronized 但它们在同一个对象上没有同步,如何锁定它,以便如果该类有两个实例,方法 setAsetB 不能同时发生?

最佳答案

简而言之,您可以在两个方法的主体中使用 synchronized (lockObj) {...} block ,并使用相同的 lockObj 实例。

class MyClass {
private final Object lock;

public MyClass(Object lock) {
this.lock = lock;
}

public void setA() {
synchronized (lock) {
//...
}
}
public void setB() {
synchronized (lock) {
//...
}
}
}

需要注意的几点:

  • 锁不必是静态的。如何提供它取决于您的实现。但是,如果您希望每个 MyClass 实例阻止线程同时执行其 block ,则它们必须使用相同锁实例。
  • 在这种情况下,您不能使用同步方法,因为每个非静态同步方法都将在此实例的监视器上使用它。
  • 如果要访问其他实例成员,也不能使用静态同步方法。

关于java - 如果我有两个方法不能在不同线程的一个类中同时发生,如何锁定它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36118340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com