转载自 如何"优雅"地终止一个线程?

我们的系统肯定有些线程为了保证业务需要是要常驻后台的,一般它们不会自己终止,需要我们通过手动来终止它们。我们知道启动一个线程是start方法,自然有一个对应的终止线程的stop方法,通过stop方法可以很快速、方便地终止一个线程,我们来看看stop的源代码。

通过注解@Deprecated看出stop方法被标为废弃的方法,jdk在以后的版本中可能被移除,不建议大家使用这种API。

那为什么这么好的一个方法怎么不推荐使用,还要标注为废弃呢?

假设有这样的一个业务场景,一个线程正在处理一个复杂的业务流程,突然间线程被调用stop而意外终止,这个业务数据还有可能是一致的吗?这样是肯定会出问题的,stop会释放锁并强制终止线程,造成执行一半的线程终止,带来的后果也是可想而知的,这就是为什么jdk不推荐使用stop终止线程的方法的原因,因为它很暴力会带来数据不一致性的问题。

正因为stop方法太过暴力,所以一般不推荐使用,除非你非常清楚你自己的业务场景,用stop终止不会给你的业务带来影响。

说了这么多,那如何优雅地终止一个线程呢?看看下面的程序。

其实也不难,只需要添加一个变量,判断这个变量在某个值的时候就退出循环,这时候每个循环为一个整合不被强行终止就不会影响单个业务的执行结果。

如何quot;优雅quot;地终止一个线程?相关推荐

  1. 第5章 不要让线程成为脱缰的野马(Keeping your Threads on Leash) ---干净的终止一个线程...

    干净的终止一个线程  我曾经在第2章产生一个后台线程,用以输出一张屏幕外的 bitmap 图.我们必须解决的一个最复杂的问题就是,如果用户企图结束程序,而这张bitmap 图尚未完成,怎么办?第2章的 ...

  2. java并发编程之正确地终止一个线程interrupt/interrupted

    以下demo是错误的终止线程的demo(使用thread.stop()方法实现终止线程): public class ErrorStopThreadDemo {public static void m ...

  3. Qt学习之如何启动和终止一个线程

    今天来看看Qt如何启动一个线程吧,代码就以精通Qt4编程的为例 先来给出每个文件的相关代码然后再加以分析 //*************dialog.h**************//#ifndef ...

  4. python终止线程_Python里怎么终止一个线程

    Python用sleep停止一个线程的运行,而不影响主线程的运行,案例代码如下: from threading import *import timeclass MyThread(Thread): d ...

  5. Android立刻终止一个线程

    /*** Created by JuTao on 2017/2/4.* 如何中止一个线程*/ public class ThreadDone {public static void main(Stri ...

  6. 线程停止继续_晓龙吊打面试官系列: 如何优雅的停止一个线程

    一.什么时候我们需要中断一个线程 在实际的开发中,有很多场景需要我们中断一个正在运行的线程,就比如: 当我们使用抢票软件时,其中某一个通道已经抢到了火车票,这个时候我们就需要通知其他线程停止工作. 当 ...

  7. python结束线程_2018-01-02 如何优雅地终止python线程

    前言 · 零 我们知道,在python里面要终止一个线程,常规的做法就是设置/检查 --->标志或者锁方式来实现的. 这种方式好不好呢? 应该是不大好的!因为在所有的程序语言里面,突然地终止一个 ...

  8. 安全终止MFC线程全

    终止线程  有两种情况可以使线程结束:控制函数结束或者根本就不允许线程完成,而提前终止它.我们可以想象在WORD中进行后台打印,如果打印结束了,那线程就可以结束了.如果用户中止了打印,那后台打印线程也 ...

  9. 如何终止Java线程

    Thread.stop,Thread.suspend,Thread.resume,Runtime.runFinalizersOnExit都已经被废弃了. 为什么要废弃Thread.stop?因为此函数 ...

最新文章

  1. windows mobile设置插移动卡没反应_ipad pro外接移动硬盘ipados
  2. SimpleInjector 简单使用
  3. 论一枚数据科学家的自我修养
  4. python空类型-python 空类型
  5. python怎么用excel-Python使用xlwt模块操作Excel的方法详解
  6. 剪切粘贴时总是上次的内容_【Procreate 迷你课堂】#4 三指快速拷贝及粘贴
  7. C. Goodbye Souvenir(CDQ 或 树套树)
  8. 12月25日服务器例行维护公告,12月25日维护公告 技能修改测试
  9. 在Objective-C中,如何测试对象类型?
  10. 11.盛水最多的容器
  11. 20191118每日一句
  12. 2016PHP开发者大会
  13. android的wifi开发,android开发教程之wifi开发示例
  14. 使用 Nginx 服务器配置 flv、mp4,可以直接浏览器播放
  15. #S/4HANA 1610: Use case series intro and collection
  16. 【CF724F】Uniformly Branched Trees
  17. F-星球大战 几何 割线定理 精度
  18. Touch ID回归,为用户对苹果最期待功能
  19. java 图片格式校验_(转载)Java对上传的图片进行格式校验以及安全性校验
  20. 2022-2028全球与中国锂电池隔膜市场现状及未来发展趋势

热门文章

  1. redis storm mysql_flume+kafka+storm+redis/mysql启动命令记录
  2. [Java基础]反射获取成员方法并使用
  3. [蓝桥杯][算法提高VIP]因式分解
  4. C++unique函数应用举例
  5. hash table(开放寻址法-线性探查实现的哈希表)
  6. Long Path CodeForces - 407B(动态规划+思维+公式推导)
  7. java继承层次结构,在状态模式中实现继承层次结构 - java
  8. c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...
  9. pip ImportError: cannot import name 'main' after update
  10. Codeforces Round #703 (Div. 2) Guessing the Greatest C1 C2 二分