有这么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种方式有什么区别么? 

解决方案 »

  1.   

    个人认为是应该不会出现无限循环!
    一下是我的调试类:
    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方法,线程都可以停止!
      

  2.   

    前面一种方法出错了,就运行catch中,线程终止
    后面一种方法不中止线程
      

  3.   

    前一个抛出异常可以跳出循环结束线程,后一个如果finally里面没有修改bConnected为false或者return,则继续该循环线程。