ser*_*nni 8 java static field updating completable-future
前提条件(通用描述):
1.静态类字段
static List<String> ids = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
2. CompletableFuture#runAsync(Runnable runnable,Executor executor)
在static void main(String args[])方法中调用
3.从step2添加到调用someCollection内部的元素runAsync
代码段(具体说明):
private static List<String> ids = new ArrayList<>();
public static void main(String[] args) throws ExecutionException, InterruptedException {
//...
final List<String> lines = Files.lines(path).collect(Collectors.toList());
for (List<String> lines : CollectionUtils.split(1024, lines)) {
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
List<User> users = buildUsers();
populate(users);
}, executorService);
futures.add(future);
}
private static void populate(List<User> users){
//...
ids.add(User.getId);
//...
}
}
Run Code Online (Sandbox Code Playgroud)
问题描述:
正如我从并发的角度理解的那样,静态变量不能在线程之间共享,因此数据可能会以某种方式丢失.
它应该改为使用volatile还是合理使用
ConcurrentSkipListSet<String>?
| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |