【发布时间】:2011-12-12 16:33:08
【问题描述】:
如何同步同一个类的两个不同方法以锁定同一个对象?这是一个例子:
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()。
我应该怎么做锁?谢谢!
L.E.
好的,我理解了锁的概念,但现在我还有一个问题。
假设我有一个带有 public static myList 的类,并且只有该类的 一个 实例。从那个实例中,我创建了Thread 的n 实例,它们获取该列表的每个元素并对其进行一些处理。
现在,在特定时刻,myList 已更新。那些已经在处理 myList 元素的线程会发生什么?更新时如何锁定myList 的访问权限?
【问题讨论】:
-
@Grammin 我会说没关系。
-
如果您还有其他问题,最好的办法是打开另一个帖子。这样就可以看到了。
标签: java methods locking synchronize