我不想用break,return跳出循环,
看了一些资料,说一个函数不停的运行
,运行到一定时间后,就会抛出InterruptedException
异常,然后就跳出了循环。
我这个代码跑了一下午拉,也没有停止
大家帮看看,修改一下,呵呵
代码如下:
package com.samsung;import java.lang.Thread;
public  class  Test1 extends Thread
{

   public void run(){ 
   
   while(true){ 
   
   try{ 
    boolean res=this.whiledo();
   }catch(InterruptedException e1){ 
       throw new RuntimeException(); 
    } 
   }
  
  }
  
  public boolean whiledo() throws InterruptedException
  {
     while(true)
    {
      System.out.println("xxxxxxxxxxxxxxxxxxxx");
    }
  }
  
  public  static void main(String args[])
  {
     Test1 t=new Test1();
     t.start();
  } }

解决方案 »

  1.   

    while循环的参数用一个标志,到要跳出的时候置这个标志位为false
      

  2.   

    不想用break,return不知道怎么跳出循环
      

  3.   

    既然提供了 break为什么不用
      

  4.   

    看了一些资料,说一个函数不停的运行 
    ,运行到一定时间后,就会抛出InterruptedException 
    异常,然后就跳出了循环。 
    这个说法就有问题,好多服务器的线程要跑好几个月或者更长的时间,要跳出循环你就需要用break,return或者设置一个标志位,每次循环的后检验标志位是否为真,如果为真则继续循环否则循环终止。
      

  5.   

    好有意思的说法啊,跑n个月也不一定会抛异常啊
     try{ 
        boolean res=this.whiledo(); 
      }catch(InterruptedException e1){ 
          throw new RuntimeException(); 
        } 
      } 假设抛也被你捕获了捕获后继续循环,这很明显是个死循环.
      

  6.   

    现在,如果你要安全有效地终止一个线程,应该采用以下这些方法: 1,线程正常执行完毕,正常结束。 
    也就是让run方法执行完毕,该线程就会正常结束。 2,监视某些条件,结束线程的不间断运行。 
    然而,常常有些线程是伺服线程。它们需要长时间的运行,只有在外部某些条件满足的情况下,才能关闭这些线程。 
    通常,它们执行在一个while(true)的死循环中。 
    如: 
    @Override 
    publicvoidrun(){ while(true){ 
    someWork(); 
    if(finished){ 
    break; 

    try{ 
    Thread.sleep(10000); 
    }catch(InterruptedExceptione){ 
    /*TODO自动生成catch块 

    */ 
    e.printStackTrace(); 

    } } 
    我们可以在while死循环内,每次循环时,察看外部条件,看看是否需要关闭当前线程。如果是,就break,跳出死循环,或者是抛出异常,跳出死循环,结束线程。 3,捕获InterruptedException运行时异常,中断当前线程。 
    有些执行伺服任务的线程,在while(true)这样的死循环内部,是一个阻塞中的方法。此时,就不能采用第二种方法了。因为,当该方法没有返回时,该线程一直处于阻塞当中,根本无法执行其他语句。 
    此时,就需要调用该线程的interrupt方法,产生一个InterruptedException运行时异常,是阻塞中的那个方法抛出这个异常,从而让我们有机会结束这个线程的执行。 
    如: 
    @Override 
    publicvoidrun(){ 
    while(true){ 
    try{ 
    //getSendMessages是BlockingQueue类。它的take方法将会阻塞! 
    responseMessage=this.getSendMessages().take(); [Page]
    }catch(InterruptedExceptione1){ thrownewRuntimeException(); 
    //或者break; 

    someWork(); } 
    一个外部的Thread对象指向这个线程。需要结束这个线程时,只需要调用thread对象的interrupt()方法,就会在 
    responseMessage=this.getSendMessages().take(); 
    这条语句中产生一个InterruptedException异常,从而结束该线程的阻塞状态,通过抛出异常,或者break跳出死循环,结束这个线程。
    大家看看第三种停掉线程的方法,我就是想用第三种方式实现停掉线程。
    但是我写的这个实例失败了,大家能帮我看看怎么回事,可能是我理解的
    问题 ,呵呵,大家动手改一下,我的代码吧 ,哈哈哈 
      

  7.   

    你可以在while(true){}这个代码块内写一个跳出循环的语句,比如用if(i<100){i--;}这样的控制语句可以执行多少次后跳出
      

  8.   

    大家提的想法我都知道啊,我现在就是想用3,捕获InterruptedException运行时异常,中断当前线程。 
    这个方法中断当前的线程,哪位兄弟能在我的程序基础上修改一下,谢谢
      

  9.   

    这个说法就有问题,好多服务器的线程要跑好几个月或者更长的时间,要跳出循环你就需要用break,return或者设置一个标志位,每次循环的后检验标志位是否为真,如果为真则继续循环否则循环终止。 
      

  10.   

    如果随便就要抛异常,能用JAVA写服务器端代码么? 
      

  11.   

    线程抛异常不太好吧...似乎不好catch.我觉得还是在while()那设置个标志位比较好.