暂停、恢复和停止操作对应在线程Thread的API就是suspend()、resume()和stop()。但是这些API是过期的,也就是不建议使用的。不建议使用的原因主要有:
以suspend()方法为例,在调用后,线程不会释放已经占有的资源(比如锁),而是占有着资源进入睡眠状态,这样容易引发死锁问题。
同样,stop()方法在终结一个线程时不会保证线程的资源正常释放,通常是没有给予线程完成资源释放工作的机会,因此会导致程序可能工作在不确定状态下。正因为suspend()、resume()和stop()方法带来的副作用,这些方法才被标注为不建议使用的过期方法。

停止线程

1.stop 这个不建议,因为过期了. stop相当于linux的kill进程,是非常暴力的,我不知道用户是不是还有请求没处理完的,这样我强制关闭,可能会有不可预测的问题出现

2.interrupt 优雅的中断,建议用这个
先去阻止后续的请求进来,同时等待当前正在执行的进程都处理完了再去停止掉线程

3…通过指令的方式, volatile boolean isStop = false;

volatile是线程可见的.

4…Thread.interrupted();

对设置的中断标识的线程进行复位,就是给interrupted 变成false.

与线程中断有关的方法有三个:

public void Thread.interrupt() //中断线程
public boolean Thread.isInterrupted() //判断是否被中断
public static boolean Thread,interrupted() //判断是否被中断,并清除当前的中断状态

线程通过方法isInterrupted()来进行判断是否被中断,也可以调用静态方法Thread.interrupted()来进行判断当前线程是否被中断,不过Thread.interrupted()会同时将中断标识位改写为false。

isInterrupted()方法是boolean类型的,如果这个线程被中断了就返回true,否则就返回false

如果一个线程处于了阻塞状态(如线程调用了thread.sleep、thread.join、thread.wait等),则在线程在检查中断标示时如果发现中断标示为true,则会在这些阻塞方法调用处抛出InterruptedException异常,并且在抛出异常后会立即将线程的中断标示位清除,即重新设置为false。

不建议自定义一个取消标志位来中止线程的运行。因为run方法里有阻塞调用时会无法很快检测到取消标志,线程必须从阻塞调用返回后,才会检查这个取消标志。这种情况下,使用中断会更好,因为,

一、一般的阻塞方法,如sleep等本身就支持中断的检查,
二、检查中断位的状态和检查取消标志位没什么区别,用中断位的状态还可以避免声明取消标志位,减少资源的消耗。
注意:处于死锁状态的线程无法被中断

java线程的停止,暂停,恢复*相关推荐

  1. Qt之线程的开始暂停恢复停止

    一.前言 软件开发中,使用到线程就不可避免的要实现线程的暂停恢复停止等操作,总不可能说线程一旦启动就直接运行到结束了,中途不能停止啥的.线程的开始以及结束都比较简单,都有对应的接口可以调用,线程的暂停 ...

  2. java 线程强制停止线程_java多线程之停止线程

    在多线程开发中停止线程是非常重要的技术点. 停止线程在Java语言中并不像break语句那样干脆.须要一些技巧性的处理. 一.  异常法 採用异常法来停止一个线程.首先我们须要了解一下两个方法的使用方 ...

  3. tomcat 停止 java 线程不停止_Java Tomcat,底层Netty线程不停止

    我正在尝试使用log4j appender将日志发送到GrayLog2(log4j2-gelf).所以我加我的依赖到我的pom.xml配置log4j2.xml来配置我的appender.用maven构 ...

  4. c#语言窗体运行暂停指令,C#线程启动、暂停、恢复、停止怎么实现

    论坛的高手你们好,本人是一个菜鸟,肯请大家帮个忙实现如下功能: 首先窗体界面如下: 怎么实现"start"启动线程."pause"暂停线程."resu ...

  5. 如何停止一个正在运行的java线程

    与此问题相关的内容主要涉及三部分:已废弃的Thread.stop().迷惑的thread.interrupt系列.最佳实践Shared Variable. 已废弃的Thread.stop() @Dep ...

  6. java线程怎么重启_如何在Java中启动/停止/重启线程?

    10 个答案: 答案 0 :(得分:41) 一旦线程停止,您就无法重新启动它.但是,没有什么可以阻止您创建和启动新线程. 选项1:创建一个新线程,而不是尝试重新启动. 选项2:而不是让线程停止,让它等 ...

  7. Java线程的挂起与恢复 wait(), notify()方法介绍

    一, 什么是线程的挂起与恢复 从字面理解也很简单. 所谓线程挂起就是指暂停线程的执行(阻塞状态). 而恢复时就是让暂停的线程得以继续执行.(返回就绪状态) 二, 为何需要挂起和恢复线程. 我们来看1个 ...

  8. java多线程-线程的停止【interrupt】

    java多线程-线程的停止 文章目录 java多线程-线程的停止 线程停止的原理 如何正确停止线程 在普通情况下停止线程 代码展示 在阻塞情况下停止线程 代码展示 线程在每次迭代后都阻塞 代码展示 停 ...

  9. python 实现线程的暂停, 恢复, 退出详解及实例

    Python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后 ...

最新文章

  1. Docker的使用(三:Docker Hub远程镜像管理)
  2. C#的网络适配器操作
  3. ecshop ajax无刷新登陆
  4. 前瞻:Spring 6.0将停止支持Freemarker和JSP
  5. 【传统PSTN与互联网通信】
  6. 蓝牙驱动卸载后自动安装_最热建筑安装工程计算表格,输入后自动生成,省时方便易上手...
  7. wince linux 性能,wince remote call profiler(性能分析)
  8. 日期传递过程_买东西别再只看生产日期和保质期了!快算算你一天吃了多少添加剂?...
  9. Bear in the Field(CF-385E)
  10. 以流动债务为例论指标的合理使用
  11. 关于TCP或FTP异常断开的处理方法总结
  12. 程序员接私活的几个平台
  13. 【动态规划】完全背包:整数划分(方案数)
  14. 语言叮叮消息接口_五分钟学后端技术:如何学习Java工程师必知必会的消息队列...
  15. 洛谷 P1993 小K的农场 解题报告
  16. 浅谈数学在c语言编程中的,试论C语言程序设计中算法设计的作用
  17. 嵌入式Linux红外遥控,嵌入式系统中的红外遥控附加功能,嵌入式系统,红外遥控,发射...
  18. c语言万年历怎么加节日,C语言万年历
  19. Chapter 5 Eigenvalues and Eigenvectors
  20. 盘点老外对女人的爆笑称呼

热门文章

  1. css外边距自动代码,CSS外边距合并代码
  2. 如何写好论文的研究局限性
  3. 进击的java工程师
  4. setContentView报错NullPointerException: Attempt to invoke virtual method on a null object reference
  5. Go C编程 第1课 神奇的魔笔
  6. BGP-边际网关路由协议简记
  7. 2020最新版LaTeX软件教程---Tex live 2020的安装与使用
  8. ArcGIS Pro教程 | 2#用户界面和交互
  9. pip如何适应多版本的python
  10. 用C语言实现简单的计算器