JavaFX,在循环中创建线程

JavaFX,在循环中创建线程,javafx,javafx-8,Javafx,Javafx 8,有人能建议如何在循环中创建新线程吗。从数据库中检索数据,我想让每一行都在一个新线程中处理。一切都发生在控制器JavaFX中。您可能需要使用该服务,但我找不到这种方法的示例。提前感谢您确定要为每一行创建一个新线程吗?如果你有一百万行,你将有一百万个线程。 如果是这样的话,它应该是这么简单: ResultSet rs = ...; while (rs.next()) { new Thread(() -> { doSomething(); Platform

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

您确定要为每一行创建一个新线程吗?如果你有一百万行,你将有一百万个线程。 如果是这样的话,它应该是这么简单:

ResultSet rs = ...;
while (rs.next()) {
    new Thread(() -> {
        doSomething();
        Platform.runLater(() -> doSomethingThatUpdatesUI());
    }).start();
}
更新

使用javafx.concurrent.Task的示例(仅创建了一个线程):

Task Task=新任务(){
@凌驾
公开作废通知(){
结果集rs=。。。;
int max=getSizeOfResultSet(rs);
整数计数=0;
while(rs.next()){
如果(isCancelled()){
打破
}
updateProgress(计数++,最大值);
}
返回null;
}
};
yourProgressBarIfYouHaveOne.progressProperty().bind(task.progressProperty());
新线程(任务).start();
task.setOnSucceeded(事件->{
System.out.println(“好的,全部完成!”);
releaseUserInterface();
});

我想为每个应用程序添加一个新线程,因为单个应用程序在读取数据之前无法完全正常工作。应为每行打开和关闭线程。我希望它的运作会更顺利。在这种情况下,我没有尝试过,因为我试图找到与任务或服务相关的东西——正如JavaFX推荐的那样。如果您想要一个任务(来自JavaFX.concurrent包),建议只运行一个任务(请参阅)。我将用一个例子更新我的答案,一个主题怎么会不像前面的方法那样有效?因此,使用可以运行多次的“服务”可能更好?该文档不是我知道如何在“服务”中创建线程的共享示例。但是当你抛出整个线程循环,通过所有不再看到我的行,迭代变量“and”循环。我不使用“while”循环,因为稍后编辑时会考虑+/-50行,因为它们不需要遍历所有行。然后我有一个循环“for”
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();
});