我需要知道,我的这个程序是如何执行的。我将根据声明发表我的理解:
调用main方法并创建对象。一旦调用了第一个对象的start方法,它就会等待线程运行。当它运行时,它会调用run方法,而run方法又会启动for循环。在循环开始时,我设置了Thread.sleep,使该线程休眠5秒。之后,它再次启动并沿整个循环打印。调用其他线程时也一样。
然而输出是反向的,就像{1,1然后是2,2然后是3,3然后是4,4}。任何人都可以理解这是怎么回事吗?
package thread;
public class th implements Runnable {
public void run() {
for (int i = 1; i < 5; i++) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
System.out.println(e);
}
System.out.println(i);
}
}
public static void main(String args[]) {
th t1 = new th();
th t2 = new th();
Thread t = new Thread(t1);
Thread tn = new Thread(t2);
t.start();
tn.start();
}
}
答案 0 :(得分:0)
两个线程同时运行。在t2开始之前,线程t1没有运行完成。相反,t1和t2都开始了。 start方法返回正确的方式。因此主要调用在t1开始,然后立即调用t2开始。