2016-12-24 8 views
0

Привет всем Я хочу создать очередь заданий для выполнения нескольких задач. Но мое требование - я должен иметь возможность добавлять задачи в эту очередь заданий в любое время и все эти задачи должны выполняться последовательно. Я искал некоторые решения в Интернете и нашел эти две ссылки: 1) Java Thread Pool Executor Example 2) Java Executor Framework Tutorial and Best Practices. Но я не могу использовать оба этих решения. Поскольку после запуска службы Executor я не могу добавить новую задачу в службу. Потому что мы знаем, что он может вызывать InterruptedException или ConcurrentModificationException.Создайте очередность заданий или контроллер задач и динамически добавьте в него задачу в Java

+1

Использовать 'BlockingQueue' для хранения runnables и продолжать удаление и выполнение в фоновом потоке? – GurV

+0

Не могли бы вы привести несколько примеров ссылок –

ответ

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 есть примеры.