JavaFX,在循环中创建一个线程

时间:2016-09-27 11:07:00

标签: javafx javafx-8

有人可以建议如何在循环中创建新线程。从数据库中检索数据,我想让每一行都在新线程中处理。一切都发生在控制器JavaFX中。您可能需要使用该服务,但我找不到这种方法的示例。提前致谢

1 个答案:

答案 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();
});
相关问题