Привет всем Я хочу создать очередь заданий для выполнения нескольких задач. Но мое требование - я должен иметь возможность добавлять задачи в эту очередь заданий в любое время и все эти задачи должны выполняться последовательно. Я искал некоторые решения в Интернете и нашел эти две ссылки: 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 есть примеры.
Смежные вопросы
- 1. Динамически создайте jCheckBox и добавьте в jScrollPane
- 2. Создайте массив и добавьте в него кучу объектов stdCLass
- 3. Динамически создайте TabContainer и добавьте его в панель аккордеона динамически
- 4. Makefile: создайте текстовый файл и добавьте в него строки
- 5. Создайте архив и добавьте в него файлы перед отправкой клиенту
- 6. Создайте контроллер и добавьте представления в другой проект
- 7. Создайте объект программно и добавьте его в контроллер массива
- 8. Java Concurrency: найти задачу в пуле задач
- 9. Перезапустить диспетчер задач и службу отслеживания заданий (диспетчер задач и отслеживание заданий) в CDH4
- 10. Редактирование задач планировщика заданий C#
- 11. Создайте JTable в JPanel и добавьте строку
- 12. Включите шаблон и добавьте в него компоненты
- 13. Создайте PDF или похожий на него
- 14. Создайте планировщик заданий в C#
- 15. Создайте и добавьте в CSV с ruby
- 16. Создайте собственные плагины или добавьте для netbeans
- 17. Добавить очередность в OpenJMS
- 18. Создайте задачу, которая группирует несколько задач ввода-вывода
- 19. Создайте подкаталог и вставьте в него файл
- 20. Создайте divs с различными классами и добавьте jquery динамически
- 21. Создайте и добавьте TextView Progmmatically в android
- 22. Создайте общий планировщик заданий
- 23. Динамически настраиваемый задатчик заданий пользователя
- 24. Синхронизация тяжелых и легких задач в C#
- 25. Программно создайте контроллер в рельсах
- 26. Создание повторяющихся задач с помощью планировщика заданий
- 27. Проблема с планировщиком заданий, запускающая задачу
- 28. Создайте отдельные страницы или динамически создайте страницу?
- 29. Создайте таблицу impala и добавьте данные с помощью java
- 30. Многопоточность и очередность
Использовать 'BlockingQueue' для хранения runnables и продолжать удаление и выполнение в фоновом потоке? – GurV
Не могли бы вы привести несколько примеров ссылок –