gpt4 book ai didi

Java多线程访问同一个变量

转载 作者:行者123 更新时间:2023-12-01 06:39:14 24 4
gpt4 key购买 nike

我有一个Java程序,它创建了2个线程,在这2个线程内,它们试图将全局变量abc更新为不同的值,比如说整数1和整数3。

假设它们同时(同一毫秒)执行代码,例如:

public class MyThread implements Runnable{
public void run(){
while(true){
if (currentTime == specificTime){
abc = 1; //another thread update abc to 3
}
}
}
}

这种情况下,我们如何确定变量abc的结果呢?我很好奇操作系统如何安排执行?

(我知道应该使用Synchronize,但我只是想自然地知道系统将如何处理这种冲突问题。)

最佳答案

操作系统对此几乎没有参与:当你的线程运行时,分配给abc的内存由运行你的程序的JVM控制,因此是你的程序在控制。

当两个线程访问同一内存位置时,最后一个写入者获胜。然而,哪个特定线程成为最后一个写入者是不确定的,除非您使用同步。

此外,如果您不特别注意访问共享数据,一个线程甚至可能看不到另一线程写入 abc 位置的结果。

为了避免同步问题,您应该使用同步或 java.util.concurrent.atomic 类之一。

关于Java多线程访问同一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18932737/

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