是从静态方法线程保存的静态方法调用

mar*_*ler 0 java thread-safety

当我在静态java方法中使用静态属性时,此方法不再是线程保存.

在静态java方法中使用静态方法怎么样?这会弄乱我的价值观吗?

这里有一些例子:

我想这根本不是线程保存:

public static String staticText;
public static Integer staticNumber;

public static String doA(String input1, Integer input2){

    staticText = input1;
    staticNumber = input2;

    return staticText + staticNumber;
}
Run Code Online (Sandbox Code Playgroud)

这将是线程保存:

public static String doB(String input1, Integer input2){
    return input1 + input2;
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,这个方法是什么:

public static String doC(String input1, Integer input2){
    return doB(input1, input2);
}
Run Code Online (Sandbox Code Playgroud)

方法doC仍然是线程保存吗?我只是想确保在doC内调用doB的方法不会制动线程安全.

T.J*_*der 5

static和线程安全没有任何关系.一个定义一个字段是作为一个整体(static)还是与实例(不是static)相关.另一个涉及线程并发和/或序列化.

如果你从另一个静态方法调用的静态方法做了一些可能有问题的事情,如果由多个线程同时完成,你需要以通常的方式处理(同步,使用各种功能java.util.concurrent等).该方法static的事实,以及从另一种static方法调用的事实,与它完全没有任何关系.