java `SingleThreadExecutor` 是否保证在新工作开始之前完成之前的工作?
Does java `SingleThreadExecutor` guarantee previous work is finished before new one starts?
这是我的代码片段:
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
已经完成?
Tasks are guaranteed to execute sequentially, and no more than one task will be active at any given time.
所以在你的情况下 work 2
必须等到 work 1
完成。
这是我的代码片段:
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
已经完成?
Tasks are guaranteed to execute sequentially, and no more than one task will be active at any given time.
所以在你的情况下 work 2
必须等到 work 1
完成。