gpt4 book ai didi

java - 在压力测试下,函数在同时调用时有不同的行为

转载 作者:行者123 更新时间:2023-12-02 02:30:43 25 4
gpt4 key购买 nike

我在软件中发现了一个仅在压力测试下才会发生的错误。一个函数被大量调用,并且如果同时或几乎同时调用,则该函数会具有不同的行为。

我编了一个例子来说明正在发生的事情:

public void doPayment(Acccount account) throws MyException {

if (isMoneyAvailable(account)) {
confirmPayment(account);
}else{
throw new MyException(myErrorCode);
}
}

如果同时调用该函数两次,则当账户只有一笔付款的资金时,会进行两次付款。

您对如何防止此类错误有什么想法吗?

最佳答案

您可以仅在帐户对象上同步,而不是在整个方法上同步。这样它的性能就会好得多。本质上是因为我们不希望多个线程同时访问帐户对象。只要他们访问不同的帐户对象,他们就不应该互相阻止。

public void doPayment(Acccount account) throws MyException {
synchronized(account){
if (isMoneyAvailable(account)) {
confirmPayment(account);
}else{
throw new MyException(myErrorCode);
}
}
}

关于java - 在压力测试下,函数在同时调用时有不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47153722/

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