gpt4 book ai didi

java - 证明以下代码不是线程安全的

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:12 26 4
gpt4 key购买 nike

如何通过编写一些代码快速证明以下类不是线程安全的(因为它使用延迟初始化而不使用同步)?换句话说,如果我要测试以下类的线程安全性,我怎么会失败?

public class LazyInitRace {
private ExpensiveObject instance = null;

public ExpensiveObject getInstance() {
if (instance == null)
instance = new ExpensiveObject();
return instance;
}
}

最佳答案

根据定义,无法确定性地测试竞争条件,除非您控制线程调度程序(您没有)。您可以做的最接近的事情是在 getInstance() 方法中添加一个可配置的延迟,或者在问题可能出现的地方编写代码并在一段时间内运行它数千次循环。

顺便说一句,这些都不是真正的“证据”。 Formal Verification会,但是非常非常难做到,即使对于相对少量的代码也是如此。

关于java - 证明以下代码不是线程安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2410499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com