gpt4 book ai didi

java - MVC架构中如何使用线程?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:18 24 4
gpt4 key购买 nike

我的一个实现类的方法需要很长时间才能完成,这使我的 View 卡住。所以这些方法必须线程化!

所有这些方法都使用 HashMapsLists 返回数据。

我的 Controller 通过调用它们获取数据,然后将它们传递给 View 。

我想不通的是我应该在哪里创建线程。它应该在 Controller 层还是在实现类中(以及如何,因为我在那里有很多方法)。

另外,我只需要在线程工作完成时刷新 View 。这些方法将被重新调用。

我真的迷失在我遇到的所有这些线程技术中。

Controller :

SomeParser someParser = new FirstParserImpl();

HashMap<String,String> map = someParser.parseSomething();
loadTableView(map);

FirstParserImpl:

public HashMap<String,String> parseSomething() {
//opening http connection, scrape and parse data. This takes long time!
return map;
}

最佳答案

结合 James_D answer + Services( tutorial ) 您可以执行以下操作:(基本上是一个服务启动一个线程,它会完成您想要的工作并返回一个结果)

public class WorkerService extends Service<Map<String, String>> {

/**
* Constructor
*/
public WorkerService () {

// if succeeded
setOnSucceeded(s -> {
//code if Service succeeds
});

// if failed
setOnFailed(fail -> {
//code it Service fails
});

//if cancelled
setOnCancelled(cancelled->{
//code if Service get's cancelled
});
}

/**
* This method starts the Service
*/
public void startTheService(){
if(!isRunning()){
//...
reset();
start();
}

}

@Override
protected Task<Map<String, String>> createTask() {
return new Task<Map<String, String>>() {
@Override
protected Void call() throws Exception {

//create a Map<String, String>
Map<String,String> map = new HashMap<>();

//create other variables here

try{
//some code here
//.....do your manipulation here

updateProgress(++currentProgress, totalProgress);
}

} catch (Exception ex) {
return null; //something bad happened so you have to do something instead of returning null
}

return map;
}
};
}

}

关于java - MVC架构中如何使用线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39665941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com