gpt4 book ai didi

java - 访问同一个变量的各种java线程

转载 作者:太空狗 更新时间:2023-10-29 12:16:22 27 4
gpt4 key购买 nike

如果我有 10 个左右的线程访问同一个变量(只读取它,不写入),java 会允许这些线程同时读取变量还是每个线程都会排队等待读取?

我对标准行为很感兴趣,即没有特别注意访问变量。

该程序在 Linux RedHat 上运行。

最佳答案

理想情况下,它会同时读取,但在某些情况下并不安全。

例如, 如果你声明:

int i = 1;

Thread threadOne = new Thread() {
public void run() {
i++;
System.out.println("ThreadOne is " + i);
}
};

Thread threadTwo = new Thread() {
public void run() {
i++;
System.out.println("ThreadTwo is "+ i);
}
};

Thread threadThree = new Thread() {
public void run() {
i++;
System.out.println("ThreadThree is " + i);
}
};

threadOne.start();
threadTwo.start();
threadThree.start();

您可以多试几次,结果会有所不同。如果没有同步,所有线程将“随机”或“同时”读写内存,换句话说,取决于谁先完成。

多次运行程序后得到的结果:

ThreadOne is 1
ThreadThree is 3
ThreadTwo is 2

ThreadOne is 3
ThreadThree is 3
ThreadTwo is 3

ThreadTwo is 2
ThreadThree is 3
ThreadOne is 2

正如我们所见,所有三个线程都随机读取包含 int i 的内存,并通过加一来更新 int a。如果一个线程已经添加了一个,那么另一个线程将读取 2。

system.out.println() 也是一个进程。在第二次尝试中,它打印出所有 3。意思是三个线程读完int i加1后,int i最后的结果变成了3,那么system.out.println都会打印3。这里再证明一下,在所有这些线程中,所有的进程都是同时运行或线程同时运行。

关于java - 访问同一个变量的各种java线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23272987/

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