Java 第二个线程在竞速条件下的什么位置?
下面的例子来自一本解释比赛条件的书。这个例子说它有两个线程。我只能看到实现了1个线程,即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) {
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;
}