我有三个任务提交给执行者实例。我需要通知两个活动,即同步过程结束。所以我已经像这样实现了它
公共类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方式。有没有更好的方法呢?
非常感谢任何帮助。 谢谢!
答案 0 :(得分:0)
如果您不使用Future
结果而不重复ThreadPoolExecutor
,您可以等到所有提交的任务都完成后调用ExecutorService.awaitTermination(long timeout, TimeUnit unit)