关于sleep()的执行顺序
来源:5-4 遇到阻塞

hanxuanliang
2019-10-03
public class WithSleep {
public static void main(String[] args) throws InterruptedException {
Runnable runnable = () -> {
int num = 0;
System.out.println("begin");
try {
while (num <= 10000) {
if (num % 100 == 0) System.out.println(num);
num++;
Thread.sleep(10); // 1
}
} catch (InterruptedException e) {
e.printStackTrace();
}
};
Thread thread = new Thread(runnable);
thread.start();
System.out.println(Thread.currentThread().getName());
Thread.sleep(5000); // 2
thread.interrupt();
}
}
执行情况
main
begin
0
100
200
300
400
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at com.hanxunliang.stopthreads.WithSleep.lambda$main$0(WithSleep.java:19)
at java.lang.Thread.run(Thread.java:748)
老师,我有两个问题:
start()
在打印语句之前执行,为什么打印语句却在先执行?- 当运行1处
sleep()
和 2处sleep()
的执行情况是怎样的?
写回答
1回答
-
悟空
2019-10-04
你指的是main、begin这两句对吧,因为begin是在子线程,而创建并开始线程需要时间,相反,main是在主线程打印的,在执行了thread.start();之后会立刻打印main,所以main在begin之前。
两处sleep的效果相同,都是让线程暂停,不过根据执行位置的不同,一个是子线程暂停,一个是主线程暂停。
082020-04-25
相似问题