Java 在另一个类中声明Lock对象并调用Lock';另一个类中的方法
我在类Java 在另一个类中声明Lock对象并调用Lock';另一个类中的方法,java,multithreading,synchronization,Java,Multithreading,Synchronization,我在类a中声明了一个Lock对象,并在类B中调用该locks的方法 public class A{ final Lock accessLock = new ReentrantLock(true); final Condition canexe = accessLock.newCondition(); B b = new B(this); { b.methodToLock(); } } public class B{ A a ; public B(A a)
a
中声明了一个Lock
对象,并在类B
中调用该locks的方法
public class A{
final Lock accessLock = new ReentrantLock(true);
final Condition canexe = accessLock.newCondition();
B b = new B(this);
{
b.methodToLock();
}
}
public class B{
A a ;
public B(A a){
this.a = a;
}
public void methodToLock(){
a.accessLock.lock();
}
}
哪个对象将被锁定
- A类的对象是什么
- B类的对象
accessLock
实例。任何试图在同一实例上获取锁的线程都将被阻止,无论它来自哪个类。首先,代码有一些错误,因为锁是一种方法:
public class B {
A a = new A();
public void methodToLock(){
a.accessLock.lock();
}
}
在这里,您试图使用类a中对ReentrantLock
的引用accessLock
来获取锁。因此,实际上,您是在类B中声明的类a的特定实例上获取锁。如果您创建类a的新实例,则不会使用相同的锁锁定该实例。此外,它对类B的任何实例甚至类B本身都没有锁定
这意味着,如果多个线程试图修改此类中的实例
a
,它们将被相应地阻止。我对您的代码进行了一些更改,以使其能够编译。它有多个问题。你能证实我所做的与你的意图是否相符吗Thanks@bvdb很好,谢谢!