加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:09:38 所属栏目:Java 来源:网络整理
导读:Iam尝试使用ExecutorService运行一些代码将我的客户端连接到服务器.显然Iam试图让它在一个单独的线程上运行到UI线程,但是我的UI在代码执行时冻结.这不是我想要的.我以为ExecutorService会在一个单独的线程上运行?下面是我的代码 @Overridepublic void regis
Iam尝试使用ExecutorService运行一些代码将我的客户端连接到服务器.显然Iam试图让它在一个单独的线程上运行到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线程,我将不胜感激.在阅读有关执行者服务的所有文档后,也许有些东西缺失了.我还有另一个似乎有效的解决方案,但它在另一个线程的run方法中创建了一个带有timertask的循环依赖.如果线程处于活动状态,则timertask会在超时后中断线程.所以我真的不想使用那个解决方案.我也只是测试当前的超时工作.我遗漏了方法中的一些代码,因为它与我的问题不太相关.再次感谢

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读