以下Utility类在其内部调用相同的静态方法,但没有共享的全局变量。但是看起来方法nameTo()是“共享的”并且是一个问题。我对吗,这是不安全的?
public class Utility
{
public static MyObject create_1(boolean b)
{
MyObject o = new MyObject();
o.setName(nameTo(b));
return o;
}
public static MyObject create_2(boolean b)
{
MyObject o = new MyObject();
o.setName(nameTo(b));
return o;
}
public static String nameTo(boolean b)
{
if(b)
return "NameA";
else
return "NameB";
}
}
最佳答案
所有静态方法在线程之间共享。并且由于nameTo()
方法没有正在使用的任何共享状态,因此是线程安全的。
class Utility{
private static int sharedValue; //something like counter of how many times nameTo() is called
public static String nameTo(boolean b){
//logic
sharedValue++; //this will not be thread safe as it is shared state and being updated in parallel
}
}