У меня есть task
, в котором мне нужно запускать x фоновых потоков y раз после нажатия кнопки запуска.
Мне нужно иметь возможность отменить все потоки, нажав кнопку отмены, или позволить потокам работать до тех пор, пока все они не завершат, а затем отправить кнопку отмены программно.
Мне также нужно иметь возможность вернутьсястрока из задачи, чтобы я мог обновить TableView
.
Как мне сделать эту работу со службой-исполнителем, чтобы я мог отправить несколько потоков, определенных как x, и иметь возможность нажать кнопку остановки, чтобы отменить все потоки, запущенные в данный момент, но при этом позволить кнопке запускаударить снова?
В прошлом я делал:
Кнопка запуска:
public void handleStartButton(ActionEvent event) {
if(task != null) {
System.out.println("Task already running");
return;
}
task = new Task<Void>() {
@Override
protected Void call() {
new LongTask().start(this, "Data to use");
//fire cancel button here..
return null;
}
};
Thread thread = new Thread(task);
thread.setDaemon(true);
thread.start();
}
Кнопка отмены:
public void handleStopButton(ActionEvent event) {
if(task == null) {
System.out.println("Task not running");
return;
}
System.out.println("Stop Pressed");
task.cancel();
task = null;
}
Задача запускается несколько раз:
public class LongTask {
public void start(Task<Void> task, String Data) {
while (!task.isCancelled()) {
System.out.println("Running test");
try {
Thread.sleep(5000);
System.out.println(Data);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Test run ended");
}
System.out.println("Canceling...");
System.out.println("Stop Pressed");
return;
}
}