这个实用程序类有2个静态方法线程安全吗?

时间:2013-08-26 10:27:24

标签: java multithreading thread-safety static-methods

以下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";         
    }
}

3 个答案:

答案 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