作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码:
/* 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/
我是一名优秀的程序员,十分优秀!