我需要迭代一个同时在别处修改的列表,我用ArrayList读取它是不可能的。
有没有人知道我可以使用什么?或者如果可能的话?我认为做阵列复制将会减慢我的需求,但如果没有其他选择,我会调查一下。无论如何,希望另一个提示:)
代码
Iterator<blabla> haha = bytes.iterator();
while(haha.hasNext()) {
blabla aStorage = haha.next();
TimeUnit.MILLISECONDS.sleep(120);
}
和其他地方
bytes.add(aStorage);
答案 0 :(得分:1)
我会将评论移到答案中。
查看您的代码,看起来您想要一个队列,而不是列表。也许ConcurrentLinkedQueue有帮助?
以下是Queue如何工作的一个非常简单的示例:
private final static Queue<String> myQueue = new ConcurrentLinkedQueue<>();
public static void main(String[] args) {
new Thread(new Adder()).start();
new Thread(new Consumer()).start();
}
private static class Adder implements Runnable {
@Override
public void run() {
while (true) {
myQueue.add(String.valueOf(System.currentTimeMillis()));
try {
TimeUnit.MILLISECONDS.sleep(1_000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
private static class Consumer implements Runnable {
@Override
public void run() {
while (true) {
for (String value = myQueue.poll(); value != null; value = myQueue.poll()) {
System.out.println(value);
}
}
}
}
查看The Javadoc for the Queue Interface并查看Official Collections Trail,这是一个非常好的来源,可以根据需要找到合适的抽象数据类型。了解更多收藏而不是列表总是好的。
我定期使用的一些收藏品: