在java高级开发中,经常会碰到多线程,关于线程的关闭,可能会用stop() 方法,但是所有的停止方法都被废弃了,(暂停和继续的方法也是被废弃掉的),为什么不能简单的停止呢?

  1. 假如说有两个线程,其中有一个线程对一块内存加了锁,那么另一个线程再同样访问这块内存时候就会被堵塞,一旦前一个线程暂停了,那么就凉了。
  2. 假如说有两个线程,其中有一个线程在写数据的时候突然停止了,那么这块数据还可能未来的及清理,后者线程去操作内存就会出现异常,那么也凉了。

结束线程并非是本意,实则是结束任务。只要任务结束那就结束了。
那么中断的方法一般采用interrupt或boolean标志位
判断线程是否中止采用isInterrupted,
如果线程中有Thread.sleep方法,当设置中断后,执行这个方法会抛出异常,就务必在异常中继续关闭线程

Thread thread = null;
thread = new Thread(new Runnable() {@Overridepublic void run() {/** 在这里为一个循环,条件是判断线程的中断标志位是否中断*/while (true&&(!Thread.currentThread().isInterrupted())) {try {Log.i("tag","线程运行中"+Thread.currentThread().getId());// 每执行一次暂停40毫秒//当sleep方法抛出InterruptedException  中断状态也会被清掉Thread.sleep(40);} catch (InterruptedException e) {e.printStackTrace();//如果抛出异常则再次设置中断请求Thread.currentThread().interrupt();}}}
});
thread.start();//触发条件设置中断
thread.interrupt();

boolean标志位,注意volatile,保证线程间的boolean一致性

public static volatile boolean exit =false;  //退出标志public static void main(String[] args) {new Thread() {public void run() {System.out.println("线程启动了");while (!exit) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("线程结束了");}}.start();try {Thread.sleep(1000 * 5);} catch (InterruptedException e) {e.printStackTrace();}exit = true;//5秒后更改退出标志的值,没有这段代码,线程就一直不能停止}

区别

interrupt boolean标志位
系统方法
使用jni
加锁
触发方式 抛异常 布尔判断也可抛异常
  • 需要系统方式时用interrupt
  • 其他情况用boolean

java多线程开发 如何正确关闭线程相关推荐

  1. Java多线程学习九:如何正确关闭线程池?shutdown 和 shutdownNow 的区别

    如何正确关闭线程池?以及 shutdown() 与 shutdownNow() 方法的区别?首先,我们创建一个线程数固定为 10 的线程池,并且往线程池中提交 100 个任务,如代码所示. 复制代码 ...

  2. Java多线程学习(八)线程池与Executor 框架

    历史优质文章推荐: Java并发编程指南专栏 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 目录: [TOC] 本节思维导图: ...

  3. 深度讲解Java多线程开发—电子表项目实现

    目录 1.前端界面的设计 2.添加控件的事件监听 3.通过主线程对时间实时显示 4.启用线程实现对时间的修改 5.线程同步实现秒表功能 6.运行并进行调试 Hello,大家好,我是灰小猿! 今天和大家 ...

  4. 正确关闭线程池:shutdown 和 shutdownNow 的区别

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/xiewenfeng520/ article/details/107013342 前言 本章分为两个议题 如何正确关闭线程池 s ...

  5. Java多线程编程-(4)-线程间通信机制的介绍与使用

    上一篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...

  6. java线程带来的异常,java多线程练习之捕获子线程异常例子

    本文章给大家介绍java多线程练习之捕获子线程异常一个实例,希望对大家会有所帮助. java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己 ...

  7. Java多线程开发系列之四:玩转多线程(线程的控制2)

    在上节的线程控制(详情点击这里)中,我们讲解了线程的等待join().守护线程.本节我们将会把剩下的线程控制内容一并讲完,主要内容有线程的睡眠.让步.优先级.挂起和恢复.停止等. 废话不多说,我们直接 ...

  8. Java多线程开发(一)Java多线程编程简介

    文章目录 参考 Java线程简介 Thread类构造方法和属性 常用Thread类方法 线程的生命周期 多线程编程的优势和风险 安全性问题 活跃性问题 性能问题 参考 [Java并发系列01]Thre ...

  9. Java多线程1:进程与线程概述

    进程和线程 谈到多线程,就得先讲进程和线程的概念. 进程 进程可以理解为受操作系统管理的基本运行单元.360浏览器是一个进程.WPS也是一个进程,正在操作系统中运行的".exe"都 ...

最新文章

  1. python中一共有多少个关键字-Python中所有的关键字
  2. Arduino UNO WIFI开发板,学习必备开发套件
  3. Dnn's Event Logging API
  4. 什么是交互设计?交互设计是用来干什么的?
  5. android传感器_Android传感器
  6. php redis 集群 长连接池,php如何实现redis连接池
  7. 如何安装 Microsoft Office 兼容包,以便您可以在早期版本的 Microsoft Office 中打开和保存 Office Open XML 格式...
  8. Excel使用频率较高的数据处理和分析-----数据透视表
  9. 三维匹配_为什么你的倾斜摄影三维建模模型效果差,都进来看看
  10. 如何使用免费的WordPress FooGallery插件创建图像库
  11. Multiple Hypothesis Tracking Revisited
  12. 程序员键盘使用进阶技巧
  13. [机缘参悟-72]:深度思考-人生自省的四重境界:不觉、自觉、觉他、圆满
  14. 从目标检测到小目标检测
  15. alias别名设置及删除
  16. 网络课程学习视频的快进播放和去除鼠标移动视频暂停的问题
  17. 干货分享|串流游戏软件大比拼
  18. python杨辉三角输出指定行_使用python打印十行杨辉三角过程详解
  19. 二维数组的认识及其表示元素的两种方式
  20. 股市行情的真谛--威廉.D.江恩

热门文章

  1. Python实现可视化(一)--双Y轴画图及图例控制
  2. Java中的序列化到底是什么
  3. 大猛网赚编程之从易语言走向c,浅析易语言网赚应用心得
  4. Python爬虫入门8:BeautifulSoup获取html标签相关属性
  5. captcha验证码存到redis并实现简易登录
  6. android 简单文件管理器的实现
  7. 园区智慧消防远程监测项目
  8. 潭州课堂25班:Ph201805201 爬虫基础 第一课 (课堂笔记)
  9. ARM与X86 CPU架构对比区别
  10. Agile and ASPICE 系列 - project management planning