gpt4 book ai didi

java - myMethod() 的多线程问题

转载 作者:行者123 更新时间:2023-12-02 01:02:14 24 4
gpt4 key购买 nike

我遇到了这个问题,我正在尝试找出答案。

这是问题:

Assuming a threaded environment, and without knowing anything else, what is the potential problem with myMethod()? How can we fix it in the simplest way?

myMethod 有什么问题?

public class DummyTest {
private static final String FUBAR = "fubar";

public boolean myMethod(final MyObject bar) {
if (bar.getFoo() != null) {
return bar.getFoo().equals(FUBAR);
} else {
return false;
}
}

public interface MyObject {
String getFoo();

void setFoo(String o);
}
}

最佳答案

您正在检查 bar.getFoo() 两次,在多线程环境中可能会产生不同的结果。 MyObject是一个接口(interface),其方法可以不同步。

您还需要为 bar 添加 null 检查,并且如果您更改代码,则不需要为 bar.getFoo() 添加 null 检查(见下文)

您可以用一种衬垫方法替换:

return bar != null && FUBAR.equals(bar.getFoo());

或者使用三元条件运算符

return bar == null ? false : FUBAR.equals(bar.getFoo());

关于java - myMethod() 的多线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59608540/

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