我的问题是关于锁定 Java 中的对象实例。我有以下方法可以被多个线程同时调用。我选择锁定一个对象实例,因为我希望允许并发处理,只要一个实例一次只能由一个线程访问。
我的简化代码是这样的,我基本上锁定了一个局部变量。这真的能满足我的需要吗?我一直在阅读建议不要锁定可能会改变的对象,我突然不确定这是否是我正在做的事情!
谢谢!
编辑:
哦,天哪……我只是意识到我试图简化发布代码的尝试可能会有点误导。
我将之前调用“getInstance”的方法重命名为其他名称(“getFromMap”),以证明该方法调用是自定义代码,它返回对哈希图中对象的引用。
之前的答案还会成立吗?为混乱道歉!
public boolean processInput(...) {
if(message == 1) {
Class_0 context = (Class_0)Class_0.getFromMap("xyz");
synchronized(context) {
context.setContextParams("abc");
context.evaluateContextRules(message, this);
}
} else if(message == 2) {
Class_1 context = (Class_1)Class_1.getFromMap("efg");
synchronized(context) {
context.setContextParams("abc");
context.evaluateContextRules(message, this);
}
}
.....
}