gpt4 book ai didi

Java获取其他类的监听锁

转载 作者:行者123 更新时间:2023-11-30 06:51:49 27 4
gpt4 key购买 nike

假设我有这个类(class):

public class Status {
private int x;

// monitor lock?
public Object myLock = new Object();

public Status(int x) {
this.x = x;
}

public int checkVar() {
return x;
}

public int incrementVar() {
++x;
}
}

然后我有一个这样的线程类:

public class MyThread implements Runnable {

public void run() {
// Is this how to acquire monitor lock of Status class?
synchronized (statusInstance.myLock) {
statusInstance.checkVar();
statusInstance.incrementVar();
}
}
}

这就是你获取另一个类的监视器锁的方式吧?

最佳答案

Java 中,如果您有对任何对象的引用,您可以将其用作 mutex。但是您会锁定对象而不是类。

问题是任何人都可以改变该对象,因为它是公开的,并获得他们不应该获得的锁。

 statusInstance.myLock = new Object();

将公共(public)可变对象用作互斥体被认为是有害的。您可以锁定该类,因为 ClassLoader

中只有一个类
 synchronized(Status.class){
..
}

或者让你的锁静态化

public static final Object MY_LOCK = new Object();    

关于Java获取其他类的监听锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39862895/

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