java的静态方法中的参数是线程安全的吗?

时间:2018-05-14 04:50:10

标签: java multithreading methods static

我在java JSP / Servlet中有一个Web应用程序

我的查询是:

如果我有如下的util方法

public static String doUtil(String param) {

    //Some processing on param.........

    String result = someProcess(param);

    return result;

}

查询是否将在Servlet Class.method(param)中访问此方法,对于来自Internet上不同客户端的多个请求,它是否可以是线程安全的?

4 个答案:

答案 0 :(得分:0)

只要不将参数值存储在servlet的状态中,就不必担心参数的线程安全性。当参数作为参数从方法传递到方法而不是存储在共享状态时,它们是安全的。

此外,您的参数为String类型。字符串类型是不可变的,因此是线程安全的。

以上适用于静态和实例方法。

答案 1 :(得分:0)

是。但只是因为你传递了不可变的String。静态方法只有在修改某些全局状态时才会变得多变。在Google上搜索:'功能没有副作用'

答案 2 :(得分:0)

根据你给出的例子,它似乎是一个纯粹的静态函数。

如果函数总是为相同的参数值返回相同的结果,并且没有像修改参数(或全局变量)或输出内容那样的副作用,则该函数称为纯函数。调用纯函数的唯一结果是返回值。纯函数的示例是strlen(),pow(),sqrt()等。

https://www.geeksforgeeks.org/pure-functions/

所以这里没有使用全局变量,因此不存在线程安全的情况。

答案 3 :(得分:0)

只要函数的内容是线程安全的,它就是线程安全的。例如。如果它是一个纯函数(仅适用于输入数据),它将是线程安全的。如果它使用另一个非线程安全的静态函数,那么它也不是线程安全的。