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

 更新时间:2017年10月23日 11:45:10   作者:Zzrdark_的博客  
这篇文章主要介绍了Java多线程编程安全退出线程方法介绍,具有一定参考价值,需要的朋友可以了解下。

线程停止

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

希望对大家有所帮助!

相关文章

  • js实现拖拽拼图游戏

    js实现拖拽拼图游戏

    这篇文章主要为大家详细介绍了js实现拖拽拼图游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java实现贪吃蛇游戏的示例代码

    Java实现贪吃蛇游戏的示例代码

    这篇文章主要为大家详细介绍了如何利用Java实现简单的贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • 详解Java中的Lambda表达式

    详解Java中的Lambda表达式

    Lambda表达式是Java SE 8中一个重要的新特性。这篇文章主要介绍了Java中的Lambda表达式 ,需要的朋友可以参考下
    2019-04-04
  • 解决Callable的对象中,用@Autowired注入别的对象失败问题

    解决Callable的对象中,用@Autowired注入别的对象失败问题

    这篇文章主要介绍了解决Callable的对象中,用@Autowired注入别的对象失败问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • springboot项目配置logback-spring.xml实现按日期归档日志的方法

    springboot项目配置logback-spring.xml实现按日期归档日志的方法

    本文主要介绍了springboot项目配置logback-spring.xml实现按日期归档日志的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • mybatis-plus3.4.0逻辑删除报错的解决

    mybatis-plus3.4.0逻辑删除报错的解决

    这篇文章主要介绍了mybatis-plus3.4.0逻辑删除报错的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Idea中如何调出Run dashboard 或services窗口

    Idea中如何调出Run dashboard 或services窗口

    这篇文章主要介绍了Idea中如何调出Run dashboard 或services窗口问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java中HashMap和HashTable区别

    Java中HashMap和HashTable区别

    HashMap和Hashtable都是Java常见的基于哈希表实现的Map接口的实现类,本文主要介绍了Java中HashMap和HashTable区别,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • Java获取当前时间方法总结

    Java获取当前时间方法总结

    本篇文章给大家整理了关于Java获取当前时间方法,以及相关代码分享,有需要的朋友测试参考下吧。
    2018-02-02
  • 解决cmd运行java程序“找不到文件”提示的方案

    解决cmd运行java程序“找不到文件”提示的方案

    在本篇文章里小编给大家分享的是关于解决cmd运行java程序“找不到文件”提示的方案,有需要的朋友们可以参考下。
    2020-02-02

最新评论