黑马程序员技术交流社区

标题: 中断线程的处理方法 [打印本页]

作者: outsider1020    时间: 2014-12-23 10:32
标题: 中断线程的处理方法
线程中断:
  (1)线程的中断,必须由线程内部自己来中断,外部只是设置中断标记
  (2)interrupt() 在外部设置一个中断标记
  (3)isInterrupted()测设线程是否中断(不清除标记) interrupted() 测试线程是否中断(清除中断标记)
  (4)调用 wait()/join()/sleep()方法会清除中断标记,并抛出InterruptedException 。
  (5)根据线程中断的原理,通常我们可以在线程中定义一个标记,在外部通过设计标记来中断线程(推荐)。
具体代码实现1:
public class RunnableDemo {
         public static void main(String [] args ) {
                Mythread2 t2=new Mythread2 ();
                Thread thread2=new Thread (t2);
                thread2 .setName( "线程二" );
                thread2 .start() ;
                 for (int i = 0; i < 10; i++) {
                         if (i== 5) {
                                t2 .setflag( false);//将中断标记设为false
                         }
                        System .out. println(Thread .currentThread() .getName() +"--->"+ i);
                         try {
                                Thread .sleep( 500);
                         } catch (InterruptedException e) {
                                e .printStackTrace() ;
                         }
                 }
               
         }
         //静态内部类相当于外部类,只有内部类可以被静态和私有修饰
         static class Mythread2 implements Runnable {
                 //中断线程时只能由线程自身中断自身,而不能由其他的线程来直接中断
                 private boolean flag= true;//设置中断标记
                 public void setflag( boolean f ){//外部方法可以通过调用此方法来设置中断标记
                         flag=f ;
                 }
                 public void run() {
                         int i =0;
                         while(flag && i <10) {//自身中断
                                System .out. println(Thread .currentThread() .getName() +"--->"+ i);
                                i ++;
                                 try {
                                        Thread .sleep( 500);
                                 } catch (InterruptedException e) {
                                        e .printStackTrace() ;
                                 }
                         }
                 }
         }
}
具体代码实现2:
public class JiShiQi {
         public static void main(String [] args ) {
                Runner3 thread3=new Runner3 ();
                Thread t=new Thread (thread3) ;
                t .start() ;
                 try {
                        Thread .sleep( 10000);
                 } catch (InterruptedException e) {
                 }
                thread3 .flag= false;
         }
}

class Runner3 implements Runnable {
         public boolean flag= true;
         public void run() {
                 while(flag ){
                         try {
                                Thread .sleep( 1000);
                                System .out. println("-----------" +new Date()+ "---------------------");
                         } catch (InterruptedException e) {
                                 return ;
                         }
                 }      
         }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2