如何同步同一个类的两个不同方法以锁定同一个对象?这是一个例子:
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()。
我应该怎么做锁?谢谢!
乐
好的,我理解了锁的概念,但现在我还有一个问题。
假设我有一个类,public static myList
并且只有该类的一个实例。从那个实例中,我创建了它n
的实例,Thread
它获取该列表的每个元素并用它做一些事情。
现在,在特定的时刻,myList
被更新。那些已经在处理 myList 元素的线程会发生什么?更新时我应该如何锁定访问权限myList
?