如何同步来自同一个类的两种不同方法以锁定同一对象?以下是一个例子:
问题在于如何防止run()在执行doJob时访问myList,反之亦然?
想象一下:我启动线程并开始向列表中添加元素。在随机的某个时刻,我从另一个持有对我的线程引用的类中调用doJob()。
如何进行锁定?谢谢!
L.E.
好的,我理解了锁的概念,但现在我有另一个问题。
假设我有一个带有public static myList的类,并且该类只有一个实例。我从该实例创建n个Thread实例,每个实例都使用该列表的每个元素并进行一些操作。
现在,在特定时刻,myList已更新。那些已经处理myList元素的线程会发生什么?在更新myList时,应该如何锁定对myList的访问?
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
}
}
}
问题在于如何防止run()在执行doJob时访问myList,反之亦然?
想象一下:我启动线程并开始向列表中添加元素。在随机的某个时刻,我从另一个持有对我的线程引用的类中调用doJob()。
如何进行锁定?谢谢!
L.E.
好的,我理解了锁的概念,但现在我有另一个问题。
假设我有一个带有public static myList的类,并且该类只有一个实例。我从该实例创建n个Thread实例,每个实例都使用该列表的每个元素并进行一些操作。
现在,在特定时刻,myList已更新。那些已经处理myList元素的线程会发生什么?在更新myList时,应该如何锁定对myList的访问?