java - 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
已经完成?
解决方案
推荐阅读
- cakephp - CakePHP 4 - 实体默认属性
- java - 如何在 gridview 位置设置随机画布对象?
- node.js - 当该页面上没有 API 调用时如何检查 API 会话是否有效
- android - Kotlin:在多项选择测验中随机播放答案
- email - 诊断代码:smtp;451 临时本地问题 - 请稍后再试:超过重试超时
- java - 使用 BFS 从起点到终点的最短路径
- r - 确定 R 中数据框中缺失值的行的百分比
- vba - 在 PowerPoint 幻灯片放映期间移动图像
- google-bigquery - 如何将字符串更改为时间戳?
- python - 从 Pandas 数据帧上的坐标列反向地理编码