同じオブジェクトをロックするために、同じクラスの 2 つの異なるメソッドを同期する方法は? 次に例を示します。
public class MyClass extends Thread implements Observer{
public List<AnotherClass> myList = null;
public MyClass(List<AnotherClass> myList){
this.myList = myList;
}
public void run(){
while(true){
//Do some stuff
myList.add(NotImportantElement);
}
}
public void doJob{
for(int i=0; i<myList.size; i++){
ElementClass x = myList.get(i);
//Do some more stuff
}
}
}
問題は、doJob が実行されたときに run() が myList にアクセスしないようにするにはどうすればよいかということです。
これを想像してみてください: 私はスレッドを開始し、リストに要素を追加し始めます。ランダムな瞬間に、スレッドへの参照を保持する別のクラスから doJob() を呼び出します。
ロックはどうすればいいですか?ありがとう!
ル
わかりました、ロックの概念は理解しましたが、別の質問があります。
クラスがあり、そのクラスのインスタンスが1 つpublic static myList
だけあるとします。そのインスタンスから、そのリストのすべての要素を取得して何かを行うインスタンスを作成します。n
Thread
今、特定の瞬間にmyList
更新されます。すでに myList 要素を処理していたスレッドはどうなりますか? myList
更新中にアクセスをロックするにはどうすればよいですか?