我的问题是关于在Java中锁定对象实例。 我有以下方法,可以在同一时间由多个线程调用。我选择锁定一个对象实例,因为我希望允许并发处理,只要一次只能由一个线程访问一个实例。对对象实例的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);
}
}
.....
}
这看起来像一个代码气味,诚实。为什么'TestForInternals_0'有两种不同的可能类型? – 2012-07-30 13:33:21
我试图简化张贴的代码,并把它弄得一团糟......道歉! – user1563047 2012-07-30 13:37:14
好吧,我想我现在看到它......但这仍然有点臭。也许你可以使用'enum'作为消息,并在枚举方法中指定不同的行为? – 2012-07-30 13:38:41