您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 开发技术 > 正文

Java之多线程interrupt中断线程的三种方法

发表于:2017-08-08 作者:网络转载 来源:

  方法一:
  @Override
  public void run(){
  for(int i = 0; i < 100; i++){
  System.out.println(this.getname()+":"+i);
  try{
  Thread.sleep(1000);
  }catch(InterruptedException e){
  System.out.println("异常结束!");
  return;  //在异常中直接返回,从而打断线程
  }
  }
  }
  方法二(Java推荐的方法):
  //通过自定义一个FlagThread中断线程的方法,调用直接中断
  public void FlagThread extends Thread{
  //设置中断标志
  private boolean isInterrupted = false;
  //中断线程方法
  public void stopCurrentThread(){
  this.isInterrupted = true; //中断标志
  super.interrupt(); //调用系统中断,发起异常
  }
  @Override
  public void run(){
  while(!isInterrupted){
  try{
  for(int i = 0; i < 100; i++){
  System.out.println(this.getname()+":"+i);
  Thread.sleep(1000);
  }
  }catch(InterruptedException e){
  //中断抛出异常,通过标记方式结束线程
  }
  }
  System.out.println("异常结束!");
  }
  }
  方法三
  正常方式中断线程,要求不能在循环中调用sleep()方法
  关于IO读写的线程停止
  理论上无法停止,只能中断IO流,抛出异常后再处理。最好的建议就是将大数据的 IO 读写操作放在循环中进行,这样可以在每次循环中都有线程停止的时机,这也将问题转化成了如何停止正在运行中的线程的问题了。