gpt4 book ai didi

java - 竞争条件中的第二个线程在哪里?

转载 作者:行者123 更新时间:2023-12-03 23:11:17 25 4
gpt4 key购买 nike

以下示例来自一本解释竞争条件的书。该示例表示它有 2 个线程。我只能看到 1 个线程已实现,即 Thread lo = new Race0();。有人可以帮我理解这个程序吗?我是多线程环境的新手。

第一个线程在哪里被调用?

第 0 场比赛:

class Race0 extends Thread {
static Shared0 s;
static volatile boolean done = false;
public static void main(String[] x) {
Thread lo = new Race0();
s = new Shared0();
try {
lo.start();
while (!done) {
s.bump();
sleep(30);
}
lo.join();
} catch (InterruptedException e) {
return;
}
}
public void run() {
int i;
try {
for (i = 0; i < 1000; i++) {
if (i % 60 == 0)
System.out.println();
System.out.print(“.X”.charAt(s.dif()));
sleep(20);
}
System.out.println();
done = true;
} catch (InterruptedException e) {
return;
}
}
}

共享0:

class Shared0 {
protected int x = 0, y = 0;
public int dif() {
return x - y;
}
public void bump() throws InterruptedException {
x++;
Thread.sleep(9);
y++;
}
}

最佳答案

一个线程是main方法运行的主线程,另一个线程是它实例化并启动的线程(Thread lo = new Race0();).

Java 程序从在主线程中执行 main 方法开始。

此程序创建第二个线程 lo,启动线程(通过调用 lo.start();),然后运行一个循环。

此时主线程正在运行循环:

        while (!done) {
s.bump();
sleep(30);
}

与此同时,第二个线程 lo 正在执行其 run 方法:

    try {
for (i = 0; i < 1000; i++) {
if (i % 60 == 0)
System.out.println();
System.out.print(“.X”.charAt(s.dif()));
sleep(20);
}
System.out.println();
done = true;
} catch (InterruptedException e) {
return;
}

关于java - 竞争条件中的第二个线程在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25130389/

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