gpt4 book ai didi

java - java多线程由于sleep()的长度而产生不同的结果?

转载 作者:行者123 更新时间:2023-12-02 13:28:08 25 4
gpt4 key购买 nike

如果我更改 sleep() 的参数,此代码最终会产生不同的结果,以下是一些示例结果:

1.sleep(1l),线程总是自动终止,总是打印“Stoped”语句,并且Eclipse中的“Terminate”图标也将是灰色的。 (看起来工作正常吧?)

2.sleep(1000l),问题来了,如果主线程 hibernate 1秒,线程v永远不会自动终止,不会打印“Stoped”,并且图标“Terminate”的值为红色,这意味着仍有一些线程在运行。

我知道如果为参数“isRunning”添加“volitale”就可以解决这个问题,但我想知道 sleep() 语句为何以及如何影响结果?

PS:我是java和英语的新手,所以对于这个问题可能带来的任何不适,我深表歉意。

public class VolitaleTest {

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

Vo v = new Vo();
new Thread(v).start();
Thread.sleep(1000l);
v.setRunning(false);
System.out.println(v.i);
}
}

class Vo implements Runnable {

private boolean isRunning = true;
int i = 0;

public void run() {
while (isRunning) {
i++;
// System.out.println("Running");
/*
* Once you add this statement, you will always be able to terminate
* the program automatically, no matter how long the thread sleeps.
*/
}
System.out.println("Stoped.");
}

public void setRunning(boolean isRunning) {
this.isRunning = isRunning;
}
}

最佳答案

volatile 使得一个线程写入的内容(包括写入 volatile 变量)对于另一个线程从读取该变量时开始可见。如果变量不是 volatile ,则无法保证发生在内存关系。

关于java - java多线程由于sleep()的长度而产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43314429/

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