关于多线程的一个小疑问

风之子1 2013-06-22 08:59:43
方法如下:
public class Runner2 implements Runnable {
public void run() {
try {
for (int i = 0; i < 30; i++) {
System.out.println(i);
Thread.sleep(1000);
}
} catch (InterruptedException ex) {
System.out.println("线程被中断");
return;
}
}
}
public class TestInterupt {
public static void main(String[] args) {
Runner2 runner2 = new Runner2();
Thread t = new Thread(runner2);
t.start();
try {
Thread.sleep(10000);
t.interrupt();
} catch (InterruptedException ex) {
System.out.println("主线程被中断");
}
}
}

我编译并执行TestInterup输出的结果是
0
1
2
3
4
5
6
7
8
9

可是我之后将Runner2类进行改写,代码如下:
public class Runner2 implements Runnable {
public void run() {
try {
for (int i = 0; i < 30; i++) {
Thread.sleep(1000);
System.out.println(i);
}
} catch (InterruptedException ex) {
System.out.println("线程被中断");
return;
}
}
}

为什么我再次编译执行TestInterup类,其输出的结果却是:
0
1
2
3
4
5
6
7
8

为什么这次没有输出9呢?
...全文
70 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcf 2013-06-22
  • 打赏
  • 举报
回复
10000 = 10 * 1000,计时器没有那么精准,interrupt很可能在最后一次sleep的时候就被执行了。至于为什么没有“线程被中断”的输出,你只要在interrupt之后再睡一会儿就有了,因为执行完interrupt,主线程退出,程序也就退出了,自然没有输出。
rumlee 2013-06-22
  • 打赏
  • 举报
回复
原因是因为主线程在停留10秒后调用了t.interrupt,在这10秒的过程中,子线程有可能循环执行9次,也有可能执行10次,或者8次都有可能。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧