基于方法参数的java同步
我有一个很基本的方法
//do stuff
}
。我遇到了新引号会更新订单的问题,所以我想在订单参数上进行同步。所以我的代码是:
handleOrder(IOrder order) {
synchronized(order){
//do stuff
}
}
然而,intellij现在抱怨:
Synchronization on method parameter 'order'
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.
这是我真正需要关心的事情吗
# 1 楼答案
是的,因为这种类型的同步通常表示无法轻松地检查代码以确保不会发生死锁
当您在一个字段上进行同步时,您将同步代码与正在使用的实例组合在一起,这样您就可以在同一个文件中拥有大多数(如果不是所有)相互竞争的方法。这使得在同步方法中更容易检查文件是否存在死锁和错误。当使用同步包装器类时,同样的想法也适用
在传递的实例(本地字段)上进行同步时,需要查看整个应用程序的所有代码,以便在同一实例上进行其他同步工作,以获得与未发生错误相同的安全级别。此外,这必须经常进行,因为几乎不能保证在下一次提交后,开发人员会进行相同的代码扫描,以确保他们的同步不会影响某些远程目录中的代码(甚至是在机器上没有源代码的远程JAR文件中)