java线程中遇到的一个小问题,求解答

长沙郭富城 2018-06-04 10:19:15

class Mythread10 extends Thread {
@Override
public void run() {
super.run();
try {
for (int i = 0; i < 5000000; i++) {
if (Thread.interrupted()) {
System.out.println("线程终止:" + i + "---" + interrupted());
throw new InterruptedException();
}
System.out.println("i=[" + i + "]");
}
System.out.println("for after....");
} catch (InterruptedException e) {
System.out.println("catch ////");
e.printStackTrace();
}
}
}

main 方法中 对应代码
Mythread10 mythread10 = new Mythread10();
Thread thread = new Thread(mythread10);
thread.start();
Thread.sleep(1000);
thread.interrupt();


为什么把Mythread10 类中的代码改成如下,线程就不会进入if判断里面去?

@Override
public void run() {
super.run();
System.out.println("进入run方法....");
for (int i = 0; i < 5000000; i++) {
try {
if (Thread.interrupted()) {
System.out.println("线程终止:" + i + "---" + interrupted());
throw new InterruptedException();
}
System.out.println("i=[" + i + "]");

System.out.println("for after....");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


一个是try catch 里面包着for循环 --> 正常结束
一个是for 循环里面包着 try catch -->无法正常结束

为什么for 一定要放在try catch 里面?
...全文
1001 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Braska 2018-06-04
  • 打赏
  • 举报
回复
引用 2 楼 qq920447939 的回复:
try放在for循环里面 循环到某一个数据的时候中断那它会直接抛异常根本不会进到try代码块啊 所以你的if就没用了。
长沙郭富城 2018-06-04
  • 打赏
  • 举报
回复
引用 1 楼 Ragin 的回复:
catch里面break;
那 try catch 放在for 循环里面应该也会抛出异常才对啊,为什么没有抛出异常
Braska 2018-06-04
  • 打赏
  • 举报
回复
catch里面break;

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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