以下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";
}
}
答案 0 :(得分:3)
由于您的nameTo()
方法是无状态的,因此在多线程上下文中没有问题。可以根据需要在线程之间共享代码。这是重要的数据。
答案 1 :(得分:2)
所有静态方法都在线程之间共享。由于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
}
}
答案 2 :(得分:1)
您没有global state
中的数据,因此我没有看到任何线程安全问题。
这些方法都没有改变任何shared data
。