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

希望对大家有所帮助!

相关文章

  • Java中如何自定义一个类加载器

    Java中如何自定义一个类加载器

    这篇文章主要介绍了Java中如何自定义一个类加载器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 详解Java实现JSONArray转Map的三种实现方式

    详解Java实现JSONArray转Map的三种实现方式

    本文主要介绍了Java实现JSONArray转Map的三种实现方式,本文只是自己常用的三种,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Java实现开箱即用的redis分布式锁

    Java实现开箱即用的redis分布式锁

    这篇文章主要为大家详细介绍了如何使用Java实现开箱即用的基于redis的分布式锁,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以收藏一下
    2022-12-12
  • JAVA正则表达式的基本使用教程

    JAVA正则表达式的基本使用教程

    这篇文章主要给大家介绍了关于JAVA正则表达式的基本使用教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 深入理解Java中的String(示例详解)

    深入理解Java中的String(示例详解)

    文章详细介绍了Java中String类的特点、用途、主要方法以及常见用法,String类是不可变的,具有字符串常量池,特定的内存结构,并随JDK版本更新而优化,它广泛用于表示和处理文本数据,并在内存管理和性能优化方面表现出色,感兴趣的朋友一起看看吧
    2025-03-03
  • Java如何解析html中的内容并存到数据库详解

    Java如何解析html中的内容并存到数据库详解

    最近用到了Java解析Html的一个库Jsoup,所以下面这篇文章主要给大家介绍了关于Java如何解析html中的内容并存到数据库的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • Java基础巩固抽象类与接口详解

    Java基础巩固抽象类与接口详解

    在类中没有包含足够的信息来描绘一个具体的对象,这样的类称为抽象类,接口是Java中最重要的概念之一,它可以被理解为一种特殊的类,不同的是接口的成员没有执行体,是由全局常量和公共的抽象方法所组成,本文给大家介绍Java抽象类和接口,感兴趣的朋友一起看看吧
    2022-05-05
  • JPA如何将查询结果转换为DTO对象

    JPA如何将查询结果转换为DTO对象

    这篇文章主要介绍了JPA如何将查询结果转换为DTO对象,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • springboot项目部署到k8s上的方法步骤

    springboot项目部署到k8s上的方法步骤

    本文主要介绍了springboot项目部署到k8s上的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 浅谈Spring boot cache使用和原理

    浅谈Spring boot cache使用和原理

    这篇文章主要介绍了浅谈Spring boot cache使用和原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09

最新评论