Как лучше организовать запуск/остановку потоков в Java?

Друзья, подскажите, как правильнее организовать работу потоков в следующем случае. Поток, созданный для перебора неких объектов (предположим директории),

public class Processor extends Thread{

    private Object obj;

    public Processor(Object obj) {
        this.obj = obj;
    }

    @Override
    public void run() {
        // Some business logic with resultObj
        obj = resultObj;
        Processor newLinkProcessor = new Processor(obj);
        newLinkProcessor.start();
        try {
            newLinkProcessor.join();
        } catch (InterruptedException interruptedException) {
            interruptedException.printStackTrace();
        }
    }
}

вызывает такой же поток и ждёт его, чтобы потом продолжить.

Есть три кнопки со слушателями:

  1. 1-ая должна запускать задачу, либо возобновлять её, если та была поставлена на паузу.
  2. 2-ая ставить её на паузу, чтобы все потоки приостанавливались, но могли быть, потом продолжены после нажатия 1-ой кнопки.
  3. 3-ья сбрасывать задачу, чтобы при дальнейшем нажатии 1-ой кнопки, она запускалась заново.

?Вопрос: Как лучше организовать запуск, остановку, паузу/воспроизведение и соответствующее хранение всех этих потоков, чтобы их иерархия(один поток ждёт выполнения другого и тд.) и прогресс выполнения сохранялись? Подойдёт ли ArryaList для их хранения? Можно ли сделать через wait() и notify() или же как-то можно сделать через цикл и interrupt() (isInterrupted())?


Ответы (0 шт):