java - java `SingleThreadExecutor` 是否保证前一项工作在新工作开始之前完成?

标签 java java.util.concurrent

这是我的代码片段:

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 调用完成后保存它结果工作 2
这里的问题是,work 2 必须在 work 1 完成后执行。如果工作 2工作 1 完成之前开始,这可能会导致我的应用行为异常。

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

最佳答案

来自SingleThreadExecutor :

Tasks are guaranteed to execute sequentially, and no more than one task will be active at any given time.

因此,在您的情况下,工作 2 必须等到工作 1 完成。

关于java - java `SingleThreadExecutor` 是否保证前一项工作在新工作开始之前完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60812903/

相关文章:

java - 按位运算 Java AND 多个 boolean 值

带有 super 关键字的 Java 泛型方法

java - danceTo 方法行为的真实示例

java - AtomicBoolean.set(flag) 和 AtomicBoolean.compareAndSet(!flag, flag) 有什么区别?

java - 依次执行一个线程

java - ConcurrentHashMap jdk 8 使用 TreeNodes 而不是 List .. 为什么?

java - org.simpleframework.xml.ElementMap 的正确用法?

java - 删除Java字符串中不需要的字符

java - 为什么不推荐使用 isJavaLetterOrDigit?

java - 使用二进制信号量