我不想用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();
} }
看了一些资料,说一个函数不停的运行
,运行到一定时间后,就会抛出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();
} }
,运行到一定时间后,就会抛出InterruptedException
异常,然后就跳出了循环。 这个说法就有问题,好多服务器的线程要跑好几个月或者更长的时间,要跳出循环你就需要用break,return或者设置一个标志位,每次循环的后检验标志位是否为真,如果为真则继续循环否则循环终止。
try{
boolean res=this.whiledo();
}catch(InterruptedException e1){
throw new RuntimeException();
}
} 假设抛也被你捕获了捕获后继续循环,这很明显是个死循环.
也就是让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跳出死循环,结束这个线程。
大家看看第三种停掉线程的方法,我就是想用第三种方式实现停掉线程。
但是我写的这个实例失败了,大家能帮我看看怎么回事,可能是我理解的
问题 ,呵呵,大家动手改一下,我的代码吧 ,哈哈哈
这个方法中断当前的线程,哪位兄弟能在我的程序基础上修改一下,谢谢