这是我的代码片段:
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
已经完成?
最佳答案
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/