Java中的静态方法和线程安全

Java中的静态方法和线程安全,java,multithreading,Java,Multithreading,我知道静态方法不能保证线程安全。因为即使整个应用程序中只有一个类方法,也可以同时调用该方法,如果不小心,可能会导致线程安全问题。但当该类方法不影响任何全局变量时会发生什么?它仍然是线程安全的吗?例如,我有以下代码: public static String convertToString(int i) { return String.valueOf(i); } 如果两个或多个线程同时调用此方法,它是线程安全的吗 是的,该方法是线程安全的。线程安全性的问题出现在静态方法尝试执行更复杂的操

我知道静态方法不能保证线程安全。因为即使整个应用程序中只有一个类方法,也可以同时调用该方法,如果不小心,可能会导致线程安全问题。但当该类方法不影响任何全局变量时会发生什么?它仍然是线程安全的吗?例如,我有以下代码:

public static String convertToString(int i) {
    return String.valueOf(i);
}

如果两个或多个线程同时调用此方法,它是线程安全的吗

是的,该方法是线程安全的。线程安全性的问题出现在静态方法尝试执行更复杂的操作时,比如共享数据

更详细地说,

public static String convertToString(int i) {
    return String.valueOf(i);
}

上述方法仅对驻留在堆栈上的参数i进行操作。堆栈是线程本地的,因此它是完全线程安全的。

基本上,当执行递增变量i++-更新它的值,然后读取等操作时,需要同步


像读取值小心使用double和long这样的操作从定义上讲是一种原子操作,因此它是线程安全的

是的,它是线程安全的。只要上述静态方法不读取/修改共享可变引用或值。例如:-

private static int counter = 0;

public static String convertToString(int i) {

    //this has race conditions.
    counter++;

    return String.valueOf(i);
}

如果两个或多个线程同时调用此方法,它是线程安全的吗是。这已经有一个问题和答案:。没有共享状态,所以是。感谢您共享该链接。它给出了一个简洁明了的答案。谢谢。你在这一部分的措辞有点模棱两可。可以这样理解:i++是一个原子操作。