Каков правильный способ создания и использования потоков в цикле?Multi-threading - Allocating Work
Если я хочу обработать миллион элементов, я создам цикл для этого. Итак, ради эффективности я сделаю его многопоточным и выделяю каждый элемент в поток. Предположим, я создаю пять потоков, чтобы справиться с этим. Как распределить работу с потоками?
Что делать, если один поток имеет меньший элемент для обработки, поэтому он может обрабатывать другой файл –, как я могу выделить следующий элемент в цикле для этого потока?
Я создаю потоки вне цикла и затем использую их внутри?
Вот пример я работаю над – это отсутствующего создание объекта для работы с и использует только две темы, но я думаю, что люди здесь достаточно умны, чтобы знать, что я имею в виду :)
public class App
{
public static void main(String[] args)
{
App a = new App();
a.doTest();
}
private void doTest() {
Count c = new Count(21);
Count c2 = new Count(7);
Thread t = new Thread(c);
Thread t2 = new Thread(c2);
t.start();
t2.start();
for (int f = 0; f < 10; f++) {
//here - how do I select which thread to send the work to?
// ?????.processThis(nextObject); //how do I send this to the right thread (one that is idle or has least work?)
}
}
public class Count implements Runnable {
private int count;
public void processThis(Object someItemToProcess) {
//here I'll set the object to process and call the method to process it
}
public Count(int count) {
this.count = count;
}
@Override
public void run() {
//for illustration purposes
// for (int i = 1; i < count; i++) {
// System.out.println("Thread " + Thread.currentThread().getId() + " Count = " + i);
// }
}
}
}
Вы попробовали учиться? Читать книгу? Руководство? Смотреть видео? Вы видели какой-либо пример использования потоков? Каково было решение? – Amit
Hi Almitey - да, я пробовал изучать, что я в процессе этого, но все учебники/видео и т. Д. Я видел, как говорить о создании потока для подсчета до 10 или параллельных проблем, а не для фактического распределения работы. –
Похоже, вы знаете ответ на мой вопрос и считаете его довольно тривиальным, чтобы вы могли ответить на него или воздержаться от дальнейших критических комментариев? Спасибо! –