gpt4 book ai didi

java - ExecutorService 似乎在 UI 上运行线程?

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:33 25 4
gpt4 key购买 nike

我正在尝试使用 ExecutorService 运行一些代码以将我的客户端连接到服务器。显然,我试图让它在 UI 线程的单独线程上运行,但是当代码执行时我的 UI 卡住了。这不是我所期望的。我以为 ExecutorService 会在单独的线程上运行?下面是我的代码

@Override
public void registerDevice() {


ExecutorService exservice = Executors.newFixedThreadPool(10);
Future<Boolean> future = exservice.submit(new Callable() {

@Override
public Boolean call() throws Exception {

android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);

try {
Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}

reghandler.post(new Runnable() {
@Override
public void run() {
regpresenter.updateUIProgress();
}
});


return true;
}
});

exservice.shutdown();
try {
Boolean done = future.get(10, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
warningstr = "Server call timed out!";
}
exservice.shutDownNow();

}

如果有人能告诉我为什么它不独立于 UI 线程运行,我将不胜感激。阅读有关执行程序服务的所有文档后,也许我缺少一些东西。我还有另一个似乎有效的解决方案,但它在我的另一个线程的运行方法中创建了一个带有定时器任务的循环依赖。定时器任务在超时后中断线程,如果线程还活着。所以我真的不想使用那个解决方案。我现在也只是测试超时工作。我遗漏了方法中的一些代码,因为它与我的问题并不真正相关。再次感谢

最佳答案

下面的代码表示等待任务结果(最多 10 秒超时)

Boolean done = future.get(10, TimeUnit.SECONDS);

如果您不想等到任务完成,请不要调用 get()。

关于java - ExecutorService 似乎在 UI 上运行线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32551088/

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