我在这里看到了类似的问题,但我认为我的问题不是重复的。我不明白这个例子:
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 为什么Thread.sleep(1000)在t1.start()之后强迫t2线程等待?为什么t2不立即开始执行run方法?
发布于 2015-01-25 15:09:31
将您的程序想象为一个字符串(线程),当您运行您的程序(Thread.start)时,您将开始在该字符串(您的代码)上放置珠子。这意味着一个接一个,如果你睡觉(Thread.sleep) --就像你按你指定的时间放下那条线一样,那么你就不再把珠子放在上面了(对于那些不明白的人来说,这只是简单的类比)。
您所做的是得到您的第一个线程(main),然后启动两个新线程(t1,t2),但是它们到目前为止还没有功能,当您调用Thread.start()时,它们就变成了功能性线程。当前功能线程(main)有一个休眠命令,它将暂停该线程中的所有活动1秒。因此,您的程序排序如下:创建线程1和2 (t1,t2),启动线程1 (t1),然后暂停1秒,然后启动线程2 (t2),然后暂停1秒,然后打印字符串"main";
发布于 2015-01-25 14:37:35
因为此代码中的睡眠方法有一个线程,其中main()在启动另一个线程和启动下一个线程之间运行停顿一秒。
发布于 2015-01-25 14:37:59
当程序以“主”线程开始时,
调用"Thread.start()“分叉执行(导致t1并行开始),然后告诉”主“线程休眠1秒,然后启动第二个线程,然后打印"Main”。
https://stackoverflow.com/questions/28137555
复制相似问题