У меня есть список, содержащий примерно 200 тыс. элементов.
Могу ли я передать итератор для этого списка нескольким потокам и заставить их перебирать всю партию без доступа к одним и тем же элементам?
Это то, о чем я думаю в данный момент.
Главный:
public static void main(String[] args)
{
// Imagine this list has the 200,000 elements.
ArrayList<Integer> list = new ArrayList<Integer>();
// Get the iterator for the list.
Iterator<Integer> i = list.iterator();
// Create MyThread, passing in the iterator for the list.
MyThread threadOne = new MyThread(i);
MyThread threadTwo = new MyThread(i);
MyThread threadThree = new MyThread(i);
// Start the threads.
threadOne.start();
threadTwo.start();
threadThree.start();
}
Моя тема:
public class MyThread extends Thread
{
Iterator<Integer> i;
public MyThread(Iterator<Integer> i)
{
this.i = i;
}
public void run()
{
while (this.i.hasNext()) {
Integer num = this.i.next();
// Do something with num here.
}
}
}
Мой желаемый результат здесь состоит в том, чтобы каждый поток обрабатывал примерно 66 000 элементов каждый, не слишком сильно блокируя итератор, а также чтобы ни один из потоков не обращался к одному и тому же элементу.
Это звучит выполнимо?
Stream
s иparallel()
кажется здесь подходящим вариантом использования. - person Arnaud Denoyelle   schedule 05.02.2016hasNext
иnext
не являются атомарными. - person Andy Turner   schedule 05.02.2016