gpt4 book ai didi

java - 多个线程调用静态辅助方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:09:01 24 4
gpt4 key购买 nike

我有一个在 Tomcat 上运行的 Web 应用程序。

Web 应用程序中的多个位置需要进行多项计算。我可以进行这些计算静态辅助函数吗?如果服务器有足够的处理器核心,那么对该静态函数的多个调用(由对不同 servlet 的多个请求产生)是否可以并行运行?还是一个请求必须等到另一个请求完成调用?

public class Helper {
public static void doSomething(int arg1, int arg2) {
// do something with the args
return val;
}
}

如果调用并行运行:我有另一个带有静态函数的辅助类,但是这个类包含一个在静态函数中使用的私有(private)静态成员。如何确保函数是线程安全的?

public class Helper {

private static SomeObject obj;

public static void changeMember() {
Helper.obj.changeValue();
}

public static String readMember() {
Helper.obj.readValue();
}

}

changeValue()readValue() 读取/更改Helper.obj 的同一个成员变量。我是否必须使整个静态函数同步,或者只同步使用 Helper.obj 的 block ?如果我应该使用 block ,我应该使用什么对象来锁定它?

最佳答案

can i make those calculations static helper functions? if the server has enough processor cores, can multiple calls to that static function (resulting from multiple requests to different servlets) run parallel?

是的,是的。

do i have to make the whole static functions synchronized

那会起作用的。

or just the block where Helper.obj is used

这也行。

if i should use a block, what object should i use to lock it?

使用静态对象:

public class Helper {

private static SomeObject obj;
private static final Object mutex = new Object();

public static void changeMember() {
synchronized (mutex) {
obj.changeValue();
}
}

public static String readMember() {
synchronized (mutex) {
obj.readValue();
}
}
}

不过,理想情况下,您应该将辅助类编写为不可变的(无状态或其他),这样您就不必担心线程安全。

关于java - 多个线程调用静态辅助方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6202939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com