0

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オブジェクトを次のように定義されたキューに配置した場合:

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

これで、このキューから読み取るスレッドがある場合、キューからイテレーターをフェッチして、このスレッドのOrderRowsを反復処理できますか?

つまり、1つのスレッドで作成されたイテレーターを2番目のスレッドに渡して、2番目のスレッドが最初のスレッドでイテレーターが作成された元のコレクションを反復処理できるようにすることはできますか?

4

1 に答える 1

2

簡単に言えば、はい。これは、コレクションを参照する単なるオブジェクトです。

私はおそらくこれに警戒するでしょう。一方のスレッドでイテレータを使用するということは、おそらくもう一方のスレッドでコレクションを変更できることを意味し、注意しない限り、同時に変更されるリスクがあります。おそらく、元のコレクションのコピーを繰り返し処理しますか?

于 2012-12-10T09:21:37.817 に答える