我有一个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;
}
}