Привет всем Я хочу создать очередь заданий для выполнения нескольких задач. Но мое требование - я должен иметь возможность добавлять задачи в эту очередь заданий в любое время и все эти задачи должны выполняться последовательно. Я искал некоторые решения в Интернете и нашел эти две ссылки: 1) Java Thread Pool Executor Example 2) Java Executor Framework Tutorial and Best Practices. Но я не могу использовать оба этих решения. Поскольку после запуска службы Executor я не могу добавить новую задачу в службу. Потому что мы знаем, что он может вызывать InterruptedException или ConcurrentModificationException.Создайте очередность заданий или контроллер задач и динамически добавьте в него задачу в Java
0
A
ответ
1
Вы можете использовать BlockingQueue
, чтобы оставаться в отдельной ветке, пока не появится один или несколько Runnable
.
public class Mainer {
private static final BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(15);
public static void main(String[] args) {
Thread t = new Thread(() -> {
while (true) {
try {
queue.take().run();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
for (int i = 0; i < 10; i++) {
queue.add(() -> {
System.out.println("Hello");
});
}
}
}
+0
Это то, что мне нужно на самом деле .. :) –
+0
Рад, что это помогло. – GurV
0
Я думаю, что вы должны использовать ExecutorService
.
- Он поддерживает очередь задач для запуска. Вы можете предоставить свою собственную очередь, если вам нужно.
- Новые задачи могут быть добавлены в любое время с использованием метода
submit
. - Фьючерсы могут быть получены при отправке заданий.
- Задачи могут выполняться по одному или параллельно, используя пул рабочих потоков.
- Если вы используете несколько потоков, различные реализации служб-исполнителей предоставляют различные стратегии управления пулами.
- Имеются операции для слива и выключения службы.
вы дать несколько примеров ссылки
javadocs есть примеры.
Использовать 'BlockingQueue' для хранения runnables и продолжать удаление и выполнение в фоновом потоке? – GurV
Не могли бы вы привести несколько примеров ссылок –