有人可以建议如何在循环中创建新线程。从数据库中检索数据,我想让每一行都在新线程中处理。一切都发生在控制器JavaFX中。您可能需要使用该服务,但我找不到这种方法的示例。提前致谢
答案 0 :(得分:2)
您确定要为每一行创建新线程吗?如果你有一百万行,你将有一百万个线程。 如果是这样,它应该如此简单:
ResultSet rs = ...;
while (rs.next()) {
new Thread(() -> {
doSomething();
Platform.runLater(() -> doSomethingThatUpdatesUI());
}).start();
}
<强>更新强>
使用javafx.concurrent.Task(仅创建一个线程)的示例:
Task task = new Task<Void>() {
@Override
public Void call() {
ResultSet rs = ...;
int max = getSizeOfResultSet(rs);
int count = 0;
while (rs.next()) {
if (isCancelled()) {
break;
}
updateProgress(count++, max);
}
return null;
}
};
yourProgressBarIfYouHaveOne.progressProperty().bind(task.progressProperty());
new Thread(task).start();
task.setOnSucceeded(event -> {
System.out.println("OK, all done!");
releaseUserInterface();
});