gpt4 book ai didi

java - 为什么 hibernate 主线程会改变 Java 中正在运行的其他线程的行为?

转载 作者:行者123 更新时间:2023-11-30 03:32:42 25 4
gpt4 key购买 nike

这是我的代码:

/* User: koray@tugay.biz Date: 21/02/15 Time: 21:52 */

public class MyThread extends Thread {

int x = 0;

@Override
public synchronized void run() {
System.out.println("Thread running..");
while(x == 0) {
}
while(x != 1) {
System.out.println("x is" + x);
// do something else time consuming
try {
sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public void foo(int y) {
x = y;
}

}

当我像这样运行 TestClass 时:

/* User: koray@tugay.biz Date: 21/02/15 Time: 21:55 */

public class TestClass {

public static void main(String[] args) throws InterruptedException {

MyThread myThread = new MyThread();
myThread.start();
//Thread.sleep(1000);
myThread.foo(3);

}
}

我在控制台中看到:

Thread running..
x is3
x is3
x is3
x is3

没关系..

但是当我取消注释//Thread.sleep(1000); 时我预计只有 1 秒后才会出现相同的行为。但我在控制台中看到的只是。

Thread running..

不管我等多久..

为什么?

最佳答案

您需要让 Java 知道 x 的值可能会被另一个线程使用 volatile 关键字更新:

volatile int x;

关于java - 为什么 hibernate 主线程会改变 Java 中正在运行的其他线程的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28650686/

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