gpt4 book ai didi

java - 这段代码如何以及为什么是线程安全的……?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:59 24 4
gpt4 key购买 nike

这是我的代码..

@immutable // This is not a standard annotation .Only for Showing that behavior of Class 
class OneValueCached{
private final BigInteger lastNumber;
private final BigInteger[] lastFactors;
public OneValueCached(BigInteger i,BigInteger[] factors){
lastNumber=i;
lastFactors=Arrays.copyOf(factors, factors.length);
}

public BigInteger[] getFactors(BigInteger i){
if(lastNumber==null || !lastNumber.equals(i))
return null;
else
return Arrays.copyOf(lastFactors, lastFactors.length);
}
}

@threadSafe // This is not a standard annotation .Only for Showing that behavior of Class
public class VolatileCachedFactorizer implements Servlet{
private volatile OneValueCached cache=new OneValueCached(null, null);

public void service(ServletRequest req, ServletResponce resp){
BigInteger i= extractFromRequest(req);
BigInteger[] factors=cache.getFactors(i);
if(factors==null){ // ---> line 1
factors=factor(i); // --> line 2
cache=new OneValueCached(i, factors);
}

encodeIntoResponse(resp,factors);
}
}

根据 Book 为什么类 VolatileCachedFactorizer 是线程但是我的观点是..
<强>1。 @Line 1 如果此时有 2 个线程同时出现,第一个 thread 检查条件并找到 factor=null 和第二个 thread在第一个 thread 挂起在 2nd 行并发现 factor=null
后,还要同时检查相同的条件并且两者都将创建新的 OneValueCached 对象 然后这段代码如何是线程安全的..根据书这是线程安全的..

谢谢

最佳答案

它是线程安全的,因为 lastNumberlastFactors 之间永远不会不一致,这可能会导致不正确的因式分解。它不保证会发生最少数量的因式分解:OneValueCached 可以多次创建,但这仍然是线程安全的。

关于java - 这段代码如何以及为什么是线程安全的……?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9884645/

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