请使用以下代码:
public void SomeMethodWithParameters(MutableObject mutableParameter, String stringParameter, double structParameter)
{
// some code
}
据我所知,由于mutableParameter在此方法之外是可更改的,因此该代码不是线程安全的。
您在代码中使用了哪些策略(除了仅使用不可变类或结构作为参数)以防止这种可能性?是否所有传递给该方法的对象实际上都是深度克隆?
答案 0 :(得分:9)
据我所知,由于mutableParameter在此方法之外是可更改的,因此该代码不是线程安全的。
澄清:变量“mutableParameter”的内容不会改变;该变量将在其整个生命周期中引用相同的实例(前提是您不在方法中更改它)。如果某个引用同一对象的其他线程正在改变它们,那么被引用的实例所拥有的变量的内容可能会发生变化。
您在代码中使用了哪些策略(除了仅使用不可变类或结构作为参数)以防止这种可能性?
如果可能,请完全避免此问题。首先,不要在多个线程上读取和写入同一对象的相同变量。
如果你无法避免它,那么制作一个适当的访问锁定对象。
定义一个锁定协议,以便在访问可以在另一个线程上访问的任何变量之前保证锁定该对象。完成后解锁它。