将Iterator传递给Java中的线程

时间:2012-12-10 09:15:09

标签: java multithreading iterator queue

给出以下从Cassandra数据库中提取记录的代码片段:

QueryResult<OrderedRows<String, String, String>> result = rangeSlicesQuery.execute();
OrderedRows<String, String, String> rows = result.get();
Iterator<Row<String, String, String>> rowsIterator = rows.iterator();

如果我将rowsIterator对象放在Queue上,定义为:

BlockingQueue<Iterator<Row<String, String, String>>> queue = 
    new PriorityBlockingQueue<Iterator<Row<String, String, String>>>();

现在,如果我有一个从该队列读取的线程,我是否能够从队列中获取迭代器并迭代此线程中的OrderRows?

换句话说,可以将在一个线程中创建的迭代器传递给第二个线程,以便第二个线程可以迭代在第一个线程中为其创建迭代器的原始集合吗?

1 个答案:

答案 0 :(得分:2)

简而言之,是的。它只是一个引用您的集合的对象。

我可能会对此保持警惕。在一个线程中使用迭代器可能意味着您可以在另一个线程中修改您的集合,并且除非您小心,否则您将面临并发修改的风险。也许迭代原始集合的副本?