我的问题是:在嵌套子项处于 Activity 状态期间,如何保持对父项的锁定?
我正在使用 Codename One 开发框架编写一个多线程 Java 应用程序,其中有一个父类和一个嵌套子类。子类的目的是充当 Vector 上的迭代器。现在我的理解是,当迭代器运行时, vector 不能改变。
这是一个非常简单的代码示例:
public class Parent<E> implements Collection<Object> {
private Vector<Object> objectCollection;
Parent() {
this.objectCollection = new Vector<Object>();
}
public Child<Object> iterator() {
return(new Child());
}
class Child implements Iterator<Object> {
private int index;
Child() {
this.index = 0;
}
public boolean hasNext() {
int size = this.objectCollection.size()
if (size <= 0) return(false);
if (this.index >= size) return(false);
return(true);
}
public Object next() {
Object temp = objectCollection.elementAt(this.index);
this.index++;
return(temp);
}
}
}
我想要做的是,在实例化嵌套类(迭代器)时,我希望锁定父实例,以便进入父实例的所有其他线程都将被阻止,直到具有迭代器的线程完成并释放它。
我对此进行了一些搜索并发现了以下问题:
Locking and synchronization between outer and inner class methods?
Acquiring inner-class lock using outer-class locks?
但是,这些并不完全符合我的场景。我唯一能想到的就是使用自旋锁,但在 Java 中也不推荐这样做。所以基本上,我正在寻找一种方法来做到这一点。我可以编写代码,我只需要解释一下要做什么。
编辑:
只有一个线程可以访问迭代器。我试图在迭代器处于 Activity 状态时阻止修改父级。
最佳答案
我认为ReentrantReadWriteLock可以实现你的场景;但更新集合时应该使用写锁;迭代集合时使用读锁;
关于Java:当嵌套子对象处于 Activity 状态时锁定父对象(迭代器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49142788/