多线程中 try catch 问题

sakiwer 2009-02-09 10:45:35
有这么2段代码.
1.

void run{
try {
while(bConnected){
.....................
}
}catch (IOException e) {
e.printStackTrace();
}finally{
...............................
}}


2.

void{
while(bConnected){
try { .....................
}
catch (IOException e) {
e.printStackTrace();
}finally{ ...............................}
}}


注:bConnected是一个boolean变量.设为true,此代码段出现于独立线程 run方法内.
今天刚刚遇到1状态下调试通过,2状态下出现无限循环.
各位谁知道这2种方式有什么区别么?
...全文
470 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sakiwer 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 still_rain 的回复:]
前一个抛出异常可以跳出循环结束线程,后一个如果finally里面没有修改bConnected为false或者return,则继续该循环线程。
[/Quote]
了解了,感谢still_rain.
sakiwer 2009-02-10
  • 打赏
  • 举报
回复
可能我问的方式不对.代码2中 出现异常后.为什么还会出现无限循环呢?
爱摸鱼de老邪 2009-02-10
  • 打赏
  • 举报
回复
前一个抛出异常可以跳出循环结束线程,后一个如果finally里面没有修改bConnected为false或者return,则继续该循环线程。
tonyge1 2009-02-10
  • 打赏
  • 举报
回复
前面一种方法出错了,就运行catch中,线程终止
后面一种方法不中止线程
Looking_Glass 2009-02-09
  • 打赏
  • 举报
回复
个人认为是应该不会出现无限循环!
一下是我的调试类:
package test0209;

public class TestThread extends java.lang.Thread{
private boolean falg = true;
public void run(){
while(falg){
try {
System.out.println(1);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{

}
}

}
public void run_bak(){
try {
while(falg){
System.out.println(1);
}
} catch (Exception e) {
e.printStackTrace();
}
finally{

}
}
public static void main(String[] args) {
TestThread test = new TestThread();
test.start();
for(int i=0;i<10000;i++){
if(i%1000==0)
try {
test.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
}
test.setFalg(false);
}

public boolean isFalg() {
return falg;
}

public void setFalg(boolean falg) {
this.falg = falg;
}
}
连个RUN方法,线程都可以停止!
Dan1980 2009-02-09
  • 打赏
  • 举报
回复
"2状态下出现无限循环",你不是自己都发现区别了吗?还有什么疑问呢?

62,614

社区成员

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

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