我有这段代码:
AtomicReference<List<String>> atomicStrings = new AtomicReference<>();
atomicStrings.set(someFunc());
Thread.sleep(10000);
System.out.print(String.join(",", atomicStrings.get()); // will this print a,b,c ?
在哪里
private List<String> someFunc() {
List<String> list = new ArrayList<>();
new Thread(() -> {
try {
list.add("a");
Thread.sleep(1000);
list.add("b");
Thread.sleep(1000);
list.add("c");
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
return list;
}
当然,这是一个非常糟糕的例子,但我试图通过添加延迟来模仿我的真实测试用例。我的问题是,由于 someFunc() 立即返回数组,并且数组元素填充在不同的线程中,但是我们得到的结果存储在 AtomicReference 中,直到稍后我们才得到值,所以延迟我添加主函数超过了新线程产生的延迟。我返回的数组是否会填充所有元素?