首页 > 解决方案 > java`SingleThreadExecutor`是否保证以前的工作在新的开始之前完成?

问题描述

这是我的代码片段:

AppExecutors.getInstance().diskIO().execute(new Runnable() {
    @Override
    public void run() {
        // work 1
    }
});

JSONArray apiResponseGet = ApiHelper.getInstance().getData();

if(apiResponseGet == null)
    throw new Exception("Api call failed");

AppExecutors.getInstance().diskIO().execute(new Runnable() {
    @Override
    public void run() {
        // work 2
    }
});

除了这段代码之外,我要做的是启动work 1,然后在work 1执行时向 api 发出请求,并在 api 调用完成后将其结果保存在work 2.
这里的问题是work 2必须在完成后执行work 1。如果在完成work 2之前开始work 1,这可能会导致我的应用程序行为不端。

通常对 API 的调用将花费比 更长的时间work 1,但我们现在假设 api 调用已经完成,并且work 1仍在运行。由于 diskIO 是SingleThreadExecutor,这是否意味着由于它是单线程,在这种情况下work 2必须等到work 1完成?
如果答案是否定的,如何确保work 2开始时work 1已经完成?

标签: javajava.util.concurrent

解决方案


SingleThreadExecutor

任务保证按顺序执行,并且在任何给定时间不会有超过一个任务处于活动状态。

所以在你的情况下work 2将不得不等到work 1完成。


推荐阅读