Java 第二个线程在竞速条件下的什么位置?

Java 第二个线程在竞速条件下的什么位置?,java,multithreading,race-condition,Java,Multithreading,Race Condition,下面的例子来自一本解释比赛条件的书。这个例子说它有两个线程。我只能看到实现了1个线程,即thread lo=new Race0()。有人能帮我理解这个节目吗?我是多线程环境的新手 第一个被调用的线程在哪里 第0部分: class Race0 extends Thread { static Shared0 s; static volatile boolean done = false; public static void main(String[] x) {

下面的例子来自一本解释比赛条件的书。这个例子说它有两个线程。我只能看到实现了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;
        }
    }
}

一个线程是运行
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;
    }
试试看{
对于(i=0;i<1000;i++){
如果(i%60==0)
System.out.println();
系统输出打印(“.X”.charAt(s.dif());
睡眠(20);
}
System.out.println();
完成=正确;
}捕捉(中断异常e){
返回;
}

不是主线程程序,而是另一个线程
thread lo=new Race0()相同的线程?你能详细解释一下吗。我不明白。@fscore——在执行
new Race0()
之前,只有一个线程——主线程。执行后有两个。创建了一个新线程。两个线程如何同时运行?对于主方法线程,我认为必须使用方法
start()
,线程才能开始执行。因此,如果任何程序
扩展线程
并创建该程序的实例,则会自动调用
start
方法?线程lo=new Race()
作为
lo.start()意味着什么
正在被调用,这意味着它们一起是一个线程,那么主方法线程到哪里去了?@fscore主方法在主线程中运行的事实与Race0扩展线程的事实无关。JVM为主方法创建一个线程来运行。
    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;
    }