Java多线程编程安全退出线程方法介绍

所属分类: 软件编程 / java 阅读数: 46
收藏 0 赞 0 分享

线程停止

Thread提供了一个stop()方法,但是stop()方法是一个被废弃的方法。为什么stop()方法被废弃而不被使用呢?原因是stop()方法太过于暴力,会强行把执行一半的线程终止。这样会就不会保证线程的资源正确释放,通常是没有给与线程完成资源释放工作的机会,因此会导致程序工作在不确定的状态下

那我们该使用什么来停止线程呢

Thread.interrupt(),我们可以用他来停止线程,他是安全的,可是使用他的时候并不会真的停止了线程,只是会给线程打上了一个记号,至于这个记号有什么用呢我们可以这样来用。

public class Mythread extends Thread{
 public void run(){
  super.run();
  for(int i =0 ;i<50000;i++){
   if(this.interrupted()){
    System.out.println("停止");
    break;
   }
  }
  System.out.println("i="+(i+1));
 }
}
public class Run{
 try{
  MyThread thread = new MyThread();
  thread.start();
  thread.sleep(1000);
  thread.interrupt(); //打上标记
 }catch(Exception e){
  System.out.println("main");
  e.printStackTrace();
 }
 System.out.println("end!")
}

虽然这样就会停止下来 ,可是For后面的语句还是会执行。

异常法 退出线程

public class Mythread extends Thread{
 public void run(){
  super.run();
  try{
   for(int i =0 ;i<50000;i++){
    if(this.interrupted()){
     System.out.println("停止");
     throw new Exception();
    }
   }
   System.out.println("i="+(i+1));
  }catch(Exception e){
   System.out.println("抛出异常了");
   e.printStackTrace();
  }
 }
}

解释 如果当我们打上了一个标记我们就可以检测到已经打上的时候就返回个true,进入if里面返回了一个异常 这样就终止了。这样做使的线程可以在我们可控的范围里停止

用什么方法去看什么状态呢

this.interrupted():看看当前线程是否是中断状态,执行后讲状态表示改为false this.isInterrupeted():看看线程对象是否已经是中断状态,但是不清除中断状态标记。

总结

以上就是本文关于Java多线程编程安全退出线程方法介绍的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:浅谈Java多线程处理中Future的妙用(附源码)Java多线程ForkJoinPool实例详解等,有什么问题可以随时留言,小编会及时回复大家的。下面推荐本站两本关于Java编程的书籍,供参考:

Java经典实例(第三版) 完整版 ([美]达尔文) 中文pdf扫描版

https://www.jb51.net/books/577859.html

Java软件结构与数据结构(第4版) (John Lewis) 中文pdf扫描版

https://www.jb51.net/books/568505.html

希望对大家有所帮助!

更多精彩内容其他人还在看

Java数据类型的规则

这篇文章主要介绍了Java数据类型的规则的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring整合TimerTask实现定时任务调度

这篇文章主要介绍了Spring整合TimerTask实现定时任务调度的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解SpringMVC使用MultipartFile实现文件的上传

本篇文章主要介绍了SpringMVC使用MultipartFile实现文件的上传,本地的文件上传到资源服务器上,比较好的办法就是通过ftp上传。这里是结合SpringMVC+ftp的形式上传的,有兴趣的可以了解一下。
收藏 0 赞 0 分享

SpringMVC上传文件的三种实现方式

本篇文章主要介绍了SpringMVC上传文件的三种实现方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例

本篇文章主要介绍了微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
收藏 0 赞 0 分享

浅析Java中的继承与组合

本文将介绍组合和继承的概念及区别,并从多方面分析在写代码时如何进行选择。文中通过示例代码介绍的很详细,有需要的朋友可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

利用反射获取Java类中的静态变量名及变量值的简单实例

下面小编就为大家带来一篇利用反射获取Java类中的静态变量名及变量值的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java启动线程的3种方式对比分析

这篇文章主要为大家对比分析了java启动线程的3种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

SpringMVC上传和解析Excel方法

这篇文章主要介绍了SpringMVC上传和解析Excel方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

JAVA中String类与StringBuffer类的区别

这篇文章主要为大家详细介绍了JAVA中String类与StringBuffer类的区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多