等待将来在处理程序线程中获得结果

时间:2016-11-30 03:58:02

标签: java android concurrency handler

我有三个任务提交给执行者实例。我需要通知两个活动,即同步过程结束。所以我已经像这样实现了它

  

公共类SyncManager {

Handler syncHandler;

public SyncManager() {
    initHandler();
}

private void initHandler() {
    HandlerThread ht = new HandlerThread("syncHandler");
    ht.start();
    syncHandler = new Handler(ht.getLooper()) {
        private ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(3);

        public void handleMessage(Message msg) {

            Future future1 = executor.submit(new ImageRetrieverTask());
            Future future2 = executor.submit(new FileRetrieverTask());
            Future future3 = executor.submit(new AudioRetrieverTask());


            try {
                Object result1 = future1.get();
                Object result2 = future2.get();
                Object result3 = future3.get();

      // Here i can use EventBus to notify observers of the completion of the sync
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        };
    };
}

public void performSync() {
    syncHandler.sendEmptyMessage(1);
} }

分配SyncManager类时,初始化处理程序。 当调用performSync方法时,它基本上向处理程序发送一条消息,将所有与sync相关的任务添加到执行程序中,以便它可以执行它们。处理程序是等待期货结束的后台循环,以便可以通过EventBus发送通知。处理程序是我可以在后台线程中进行等待。

我觉得这是一种做到这一点的hacky方式。有没有更好的方法呢?

非常感谢任何帮助。 谢谢!

1 个答案:

答案 0 :(得分:0)

如果您不使用Future结果而不重复ThreadPoolExecutor,您可以等到所有提交的任务都完成后调用ExecutorService.awaitTermination(long timeout, TimeUnit unit)