gpt4 book ai didi

java - 单例、线程安全和互斥体

转载 作者:行者123 更新时间:2023-12-02 04:16:21 25 4
gpt4 key购买 nike

今天我正在思考这个问题。这是我正在思考的一个场景。

具有方法的单例类

public int addTwoNumbers(int a, int b) {
int x = a;
int y = b;
int z = a + b;
return z;
}

线程 - 1

singletonClassObj.addTwoNumbers(10, 20);

线程 - 2

singletonClassObj.addTwoNumbers(100, 200);

现在我的问题是,假设 Thread-1 首先执行并调用该方法。那么有可能在线程-1执行整个函数之前,线程-2调用该函数并更改x和y的值吗?例如,线程 -1 将数据发送为 10 和 20,在将总和分配给变量 z 之前,线程 -2 将 x 和 y 的值更改为 100 和 200,这又使线程 1 返回 300 30.为了克服这个问题,我们需要添加锁或互斥体,但这是否可能(没有互斥体)。

最佳答案

addTwoNumbers:所有变量都是局部变量。当调用此方法时,它们将存储在堆栈中。因为每个方法都会创建自己的堆栈。因此,两个线程将具有两个完全不同的堆栈。所以从多线程的角度来看它们是安全的。您不需要任何锁或互斥体。

如果您使用的任何对象(引用变量)始终存储在堆内存区域中。所以需要同步。

当您更新单例对象的状态时,您可能还需要同步。因为这是在线程之间共享的。

关于java - 单例、线程安全和互斥体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33273025/

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