[英]How does Thread.sleep() method work?
我在这里看到了类似的问题,但我认为我不是重复的。 我无法理解此示例:
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread() {
public void run() {
System.out.println("t1");
}
};
Thread t2 = new Thread() {
public void run() {
System.out.println("t2");
}
};
t1.start();
Thread.sleep(1000);
t2.start();
Thread.sleep(1000);
System.out.println("main");
}
为什么它总是以相同的顺序打印线程名称?
t1
//1 sec pause
t2
//1 sec pause
main
为什么在t1.start()
Thread.sleep(1000)
之后Thread.sleep(1000)
强制t2
线程等待? 为什么t2
不能立即开始执行run方法?
将您的程序视为一个字符串(线程),当您运行程序(Thread.start)时,您开始将珠子放在该字符串(您的代码)上。 这意味着一个线程必须在另一个线程之后继续进行,如果您休眠(Thread.sleep)的方式就像您在指定的时间内放下那条线程,那么就不再在其上放置小珠了(对于那些不明白)。
完成的工作是获得第一个线程(主线程),然后启动2个新线程(t1,t2),但它们目前还无法正常工作,当您调用Thread.start()时,它们就可以正常工作了。 您当前的功能线程(主线程)具有一个sleep命令,该命令将使该线程中的所有活动暂停一秒钟。 因此,您的程序的排序如下:创建线程1和2(t1,t2),启动线程1(t1),然后暂停1秒钟,然后启动线程2(t2),然后暂停一秒钟,然后打印字符串“主要”;
因为此代码中的sleep方法具有运行main()
的线程,所以在启动另一个线程与启动下一个线程之间要暂停一秒钟。
程序启动时,它从“主”线程开始,
调用“ Thread.start()”派生执行(导致t1并行开始),然后告诉“ Main”线程休眠1秒钟,然后启动第二个线程,最后打印“ Main”
似乎您正在强迫t2
等待,因为t1
启动时您尚未启动t2
。
考虑您加上两位助手,爱丽丝和鲍勃。 您告诉他们两个,当您说出他们的名字时,他们应该通过说出他们的名字来回应。 您当前的执行是:
当您说爱丽丝(Alice)时,爱丽丝(Alice)会回复她的名字,这是在您等待时出现的。 鲍勃似乎在等待,并且在某种程度上,他正在-等待您说出他的名字(开始他的话题)。 当然,爱丽丝会始终(或几乎总是)在鲍勃面前说出自己的名字。 爱丽丝无需花一秒钟的时间就能听到她的名字并以实物形式答复。 将此与以下执行进行对比:
在这种范例中,您实际上并不知道首先要说哪个名称。 您首先说过爱丽丝,但是两者之间没有空格,因此要取决于爱丽丝和鲍勃的反应速度更快。 这将对应于:
t1.start();
t2.start();
Thread.sleep(2000);
System.out.println("main");
修改以下代码可以达到您的期望:
thread1.start(); thread2.start(); Thread.sleep(2000);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.