gpt4 book ai didi

java - 为什么在方法参数上同步是 "dangerous"

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:04 27 4
gpt4 key购买 nike

我的 IDE (JetBrains IntelliJ IDEA) 警告我要对方法参数进行同步,即使它始终是对象也是如此。

enter image description here

完整警告内容如下:

Synchronization on method parameter 's' ... Inspection info: Reports synchronization on a local variable or parameter. It is very difficult to guarantee correctness when such synchronization is used. It may be possible to improve code like this by controlling access through e.g. a synchronized wrapper class, or by synchronizing on a field.

我的猜测是,对于自动装箱,参数可能是一个被转换为对象的基元?虽然,对于自动装箱,我会假设它始终是一个对象,但可能不是共享对象,这意味着它不会被共享同步。

有人知道为什么会出现警告吗?在我的例子中,ShortCircuit 类型始终是一个对象,IDE 应该能够知道这一点。

最佳答案

问题是,如果您在代码的其他地方使用 ShortCircuit 时忘记同步,您可能会得到不可预知的结果。在 ShortCircuit 类内部进行同步要好得多,这样可以保证线程安全。

更新

如果您要将同步移到类之外,那么它在本质上对线程来说是不安全的。如果你想在外部同步它,你将不得不审核所有使用它的地方,这就是你收到警告的原因。这都是关于良好的封装。如果它在公共(public) API 中,情况会更糟。

现在,如果您将 fireFinalCallback 方法移动到您的 ShortCircuit 类中,您可以保证回调不会同时触发。否则,在调用该类的方法时需要牢记这一点。

关于java - 为什么在方法参数上同步是 "dangerous",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54775142/

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