Пул потоков с ожиданием выполнения задачи в Java - PullRequest
1 голос
/ 22 мая 2019

Я хочу создать код пула потоков в Java, где задача будет ждать, пока не завершится функция, вызванная в задаче. Я прошел много примеров, но пока не могу достичь своей цели.

public class ThreadController {

    public static void main(String args[]) {
        ExecutorService service = Executors.newFixedThreadPool(5);

        List<String> list = new ArrayList<String>();
        list.add("john");
        list.add("reck");
        list.add("moni");
        list.add("sasha");
        list.add("pely");
        for (int p = 0; p < 100; p++) {
            for (int r = 0; r < 5; r++) {
                Task task = new Task(list.get(r));
                service.submit(task);
            }
        }
    }
}

final class Task implements Runnable {

    private String taskSimNo;

    public Task(String no) {
        this.taskSimNo = no;
    }

    public void run() {
        Initiate.startingInitiate(this.taskSimNo);
    }
}

Полная идея этой функции - вызвать функцию processing (), которая является методом класса mainMethod. Итак, я хочу запустить 10 потоков параллельно, но 11-я задача должна начинаться только тогда, когда завершится выполнение любой из 10 задач, поэтому мне нужно реализовать функцию ожидания, чтобы задача завершилась. Любые предложения, пожалуйста.

1 Ответ

0 голосов
/ 22 мая 2019

Ваш синхронизированный блок с task.wait () делает только блокировку цикла, поскольку нет никакого вызова метода notify.Поэтому вам, во-первых, нужно удалить это.

Во-вторых, ваш метод обработки не выигрывает от многопоточности, поскольку он вызывается в конструкторе, а создание объекта выполняется основным потоком.Решение состоит в том, чтобы переместить ваш метод обработки внутрь метода run.

Вы правильно присвоили предел для пула потоков, позволяющий запускать 10 одновременных задач.

Примечание: заказ не гарантирован!Например, задача 11 может быть запущена раньше, чем задача 8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...