繁体   English   中英

该实用工具类具有2个静态方法是线程安全的吗?

[英]Is this utility class with 2 static methods threadsafe?

以下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()方法是无状态的,因此在多线程上下文中没有问题。 您可以根据需要在线程之间共享代码。 重要的是数据。

所有静态方法在线程之间共享。 并且由于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

  }
}

您没有处于global state ,因此我看不到任何线程安全问题。 没有一种方法可以更改任何shared data

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM