gpt4 book ai didi

java - 各种线程

转载 作者:行者123 更新时间:2023-12-01 12:05:35 24 4
gpt4 key购买 nike

我正在尝试创建一个线程,该线程返回一个值,该进程运行正常,但我的屏幕仍然被锁定。我想要一个返回值的线程,但我的主线程继续运行。

我已经做到了:

    public void showPartidas(int maximumDistance){
ExecutorService es = Executors.newFixedThreadPool(1);
Future<ArrayList<Partida>> partidas= es.submit(new FilterPartidas(maximumDistance));
try {
loadInListView(partidas.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}

es.shutdown();
}




class FilterPartidas implements Callable<ArrayList<Partida> > {

private final int distance;
private ArrayList<Partida> partidas;

FilterPartidas(int distance) {
this.distance = distance;
}

@Override
public ArrayList<Partida> call() throws Exception {
partidas=null;
Download load = new Download();
Date fecha = new Date();
DateFormat fechaFormat = new SimpleDateFormat("yyyy-MM-dd");
String query = "select * from partidas where fecha >='"+fechaFormat.format(fecha)+"'";
partidas=load.obtainPartidas(query, distance, myPosition);
return partidas;
}
}

最佳答案

partidas.get() 操作是导致主线程等待执行器中 Callable 方法完成的原因。如果您希望主线程在 Callable 操作执行期间仍在运行,则必须将 partidas.get() 操作放入专用的单独线程中,例如:

替换

Future<ArrayList<Partida>> partidas=  es.submit(new FilterPartidas(maximumDistance));
try {
loadInListView(partidas.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}

进入

final Future<ArrayList<Partida>> partidas=  es.submit(new FilterPartidas(maximumDistance));
new Thread(new Runnable() {
@Override
public void run() {
try {
loadInListView(partidas.get());
} catch (InterruptedEArrayList<Partida>xception e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}).start();

或类似的线程操作(可能使用执行器、Runnable 等)。

或者您可以更改逻辑(如果可能)并将对方法的调用从 Callable 隐藏到 Runnable 类中。例如:

ExecutorService es = Executors.newFixedThreadPool(1);
es.submit(new Runnable() {
@Override
public void run() {
ArrayList<Partida> partidas = logic from you Callable call;
loadInListView(partidas);
}
});

关于java - 各种线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27650894/

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