我正在学习 Java 中的多线程,并正在试验线程。我想出了一种赛车条件代码(有点……原谅这个菜鸟),其中 2 个线程循环工作(100 次)并竞相更改静态变量。目标是当线程首先完成循环(在时间片环境中运行或并行运行)时,打印变量的值并调用 system.exit(int status) 来终止程序!这只是为了找出哪个线程赢得了比赛!
预期的输出应该是:nameOfTheThreadThatWonTheRace + "--" + valueOf'I'IncrementedInTheLoop
这是代码:
public class Nest
{
public static void main(String[] args) throws Exception
{
Thread r1 = new Thread(new Racer(),"R1");
Thread r2 = new Thread(new Racer(),"R2");
r1.start();
r2.start();
}
}
class Racer implements Runnable
{
public void run()
{
for(int i = 0; i <= 100; i++)
{
Value.value = Thread.currentThread().getName() + "--" + i;
}
Value.printValue();
System.exit(0);
}
}
class Value
{
static String value = null;
public static void printValue()
{
System.out.println(value);
}
}
但是实际输出不同(4次运行):
R2--100 R2--100
R2--84 R2--100
R1--100 R1--100
R2--39 R2--100
我不知道为什么在任何一个线程到达“System.exit(0)”行后 JVM 没有停止?exit() 是否仅关闭主线程或整个 JVM,或者仍在执行的线程正在阻止 JVM 停止?
还请向我解释为什么要生产 2 行 o/p?
For extra info:
Processor--> Intel® Core™ i5-7200U CPU @ 2.50GHz × 4
Ram--> 8GB
OS--> Fed27 workstation
(我还没有接触到 java.util.concurrent API '但我知道我可以在那里以不同的方式管理线程..)
如果您能用普通的线程术语解释而不是参考并发 API,我将不胜感激。
感谢您的帮助并再次原谅这个菜鸟:)