私の質問は、Java でのオブジェクト インスタンスのロックに関するものです。複数のスレッドから同時に呼び出すことができる次のメソッドがあります。一度に 1 つのスレッドだけが 1 つのインスタンスにアクセスしている限り、同時処理を許可したいので、オブジェクト インスタンスをロックすることにしました。
私の単純化されたコードは、基本的にローカル変数をロックしているこのようなものになります。これは私が必要としているものを本当に満たしてくれるでしょうか?変更される可能性のあるオブジェクトを決してロックしないようにするための提案を読んでいましたが、結局これが私がやっていることなのかどうか突然確信が持てなくなりました!
ありがとう!
編集:
親愛なる...投稿のためにコードを単純化しようとする試みが少し誤解を招く可能性があることに気づきました。
以前「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);
}
}
.....
}