以下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

  }
}

10-08 03:34