Java中终止某个线程的方法

来源:互联网 发布:商业地产数据分析 编辑:程序博客网 时间:2024/05/29 07:53

Java中终止某个线程的方法

在Java中有专门终止某个线程的API,如stop()和interrupt()。其中stop()由于安全机制的我问题已经被废弃不用,现在就剩下interrupt。其实这个方法并不是一个终断动作的操作,而是一个设置终断状态的操作。它需要和isInterrupted()配合使用。例如:

package org.itcast;  public class MyThread04 extends Thread {      private boolean stop = false;      public MyThread04(String threadName) {          super(threadName);      }      @Override     public void run() {          for (int j = 0; j < 100; j++) {              if(this.isInterrupted()) break;              System.out.println(Thread.currentThread().getName()+":"+j);              try {                  Thread.sleep(1000);              } catch (InterruptedException e) {                  e.printStackTrace();              }          }      }      public void setStop() {          this.stop = true;      }      //第一个线程      public static void main(String[] args) {          MyThread04 t = new MyThread04("辅线程");          t.start();          for (int i = 0; i < 10; i++) {              System.out.println(Thread.currentThread().getName()+":"+i);          }          System.out.println("....................");          t.interrupt();      }  }  

但这个很可能不会终止线程,因为当我们终止这个线程时很可能就会发生InterruptedException异常,当有这个异常发生时我们设置的终断状态也会被清除,所以我们要终断某个线程应采用以下这个方法:

package org.itcast;  public class MyThread04 extends Thread {      private boolean stop = false;      public MyThread04(String threadName) {          super(threadName);      }      @Override     public void run() {          for (int j = 0; j < 100; j++) {              if(stop) break;              System.out.println(Thread.currentThread().getName()+":"+j);              try {                  Thread.sleep(1000);              } catch (InterruptedException e) {                  e.printStackTrace();              }          }      }      public void setStop() {          this.stop = true;      }      //第一个线程      public static void main(String[] args) {          MyThread04 t = new MyThread04("辅线程");          t.start();          for (int i = 0; i < 10; i++) {              System.out.println(Thread.currentThread().getName()+":"+i);          }          System.out.println("....................");          t.setStop();      }  }  

通过设置一个我们自己的标识来达到终端某个线程。

0 0
原创粉丝点击