gpt4 book ai didi

java - 为什么这段代码不是线程安全的?

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

在下面的代码片段中,将 doThings() 方法声明为静态方法将使类线程安全。这是因为如果启动了多个 TestSeven 线程,并且由于 x 是静态变量,可能会出现竞争条件吗?

public class TestSeven extends Thread{

private static int x;

public synchronized void doThings(){
int current = x;
current++;
x = current;
}

public void run(){
doThings();
}

public static void main(String args[]){
TestSeven t = new TestSeven();
Thread thread = new Thread(t);
thread.start();
}
}

最佳答案

是的,没错。 doThings同步 性质只会阻止它被多个线程在同一实例 同时调用。变量 x 是在全局的基础上共享的,而不是在每个实例的基础上共享的,因此它是不安全的。

在现实世界中,可以把它想象成一个有几扇门的浴室——有人可以打开一扇门然后锁上它,但这并不能阻止其他人从另一扇门进来...

关于java - 为什么这段代码不是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8268220/

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