例如我有以下功能:
public static final Function<A,B> MAP_A_TO_B(){
return new Function<A,B>() {
@Override
public B apply(A) {
switch (A) {
case 1:
return B1;
case 2:
return B2;
}
return B0;
}
};
}
但我不知道它是否是线程安全的,据我所知,因为该方法不会写入任何类变量,所以它应该是安全的。我的假设正确吗?
非常感谢。
最佳答案
不要将线程安全视为方法的属性,而应将其视为数据项的属性。
为了线程安全,数据项必须是不可变的,或者对它的所有更改必须自动发布到所有线程(通过 volatile ),或者所有访问(读取和写入)必须由同一锁保护(同步对象),或者该对象必须在静态初始值设定项中设置,并且此后永远不会更改。
关于java - 我可以使用方法的哪些属性来检查它是否是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36420014/