假设我有多个线程。所有具有不同输入的人都必须进入该方法
public int MyMeth(int x, int y){
... //какая-то реализация зависящая только от входных данных
return x*y;
}
如果它不使用任何全局变量并且不调用任何使用全局变量的函数,那么使这样的方法同步是否有意义(在多线程环境中) ?
假设我有多个线程。所有具有不同输入的人都必须进入该方法
public int MyMeth(int x, int y){
... //какая-то реализация зависящая только от входных данных
return x*y;
}
如果它不使用任何全局变量并且不调用任何使用全局变量的函数,那么使这样的方法同步是否有意义(在多线程环境中) ?
如果全局变量包含该类的字段,并且仅使用原始类型或常量对象作为输入参数,则
synchronized
不需要。但在这种情况下,为了避免不必要的错误,最好将方法声明为静态。这种情况下,当你尝试从方法中访问类字段或其他非静态方法时,编译器会立即报错
synchronized
我每次都提倡明确的指示,我将举例说明:线程安全方法的一个明显示例:
线程安全方法的一个不太明显的例子:
不再是线程安全的方法,而是使用共享资源
System.in
具有未知线程安全性的方法示例
将上面的示例引入线程安全
我的信息是,该方法本身有时可能相当复杂,为了不猜测咖啡渣,至少从提高代码可读性的角度来看,最好把
synchronized