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