java多线程开发 如何正确关闭线程
在java高级开发中,经常会碰到多线程,关于线程的关闭,可能会用stop() 方法,但是所有的停止方法都被废弃了,(暂停和继续的方法也是被废弃掉的),为什么不能简单的停止呢?
- 假如说有两个线程,其中有一个线程对一块内存加了锁,那么另一个线程再同样访问这块内存时候就会被堵塞,一旦前一个线程暂停了,那么就凉了。
- 假如说有两个线程,其中有一个线程在写数据的时候突然停止了,那么这块数据还可能未来的及清理,后者线程去操作内存就会出现异常,那么也凉了。
结束线程并非是本意,实则是结束任务。只要任务结束那就结束了。
那么中断的方法一般采用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多线程开发 如何正确关闭线程相关推荐
- Java多线程学习九:如何正确关闭线程池?shutdown 和 shutdownNow 的区别
如何正确关闭线程池?以及 shutdown() 与 shutdownNow() 方法的区别?首先,我们创建一个线程数固定为 10 的线程池,并且往线程池中提交 100 个任务,如代码所示. 复制代码 ...
- Java多线程学习(八)线程池与Executor 框架
历史优质文章推荐: Java并发编程指南专栏 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 目录: [TOC] 本节思维导图: ...
- 深度讲解Java多线程开发—电子表项目实现
目录 1.前端界面的设计 2.添加控件的事件监听 3.通过主线程对时间实时显示 4.启用线程实现对时间的修改 5.线程同步实现秒表功能 6.运行并进行调试 Hello,大家好,我是灰小猿! 今天和大家 ...
- 正确关闭线程池:shutdown 和 shutdownNow 的区别
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/xiewenfeng520/ article/details/107013342 前言 本章分为两个议题 如何正确关闭线程池 s ...
- Java多线程编程-(4)-线程间通信机制的介绍与使用
上一篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...
- java线程带来的异常,java多线程练习之捕获子线程异常例子
本文章给大家介绍java多线程练习之捕获子线程异常一个实例,希望对大家会有所帮助. java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己 ...
- Java多线程开发系列之四:玩转多线程(线程的控制2)
在上节的线程控制(详情点击这里)中,我们讲解了线程的等待join().守护线程.本节我们将会把剩下的线程控制内容一并讲完,主要内容有线程的睡眠.让步.优先级.挂起和恢复.停止等. 废话不多说,我们直接 ...
- Java多线程开发(一)Java多线程编程简介
文章目录 参考 Java线程简介 Thread类构造方法和属性 常用Thread类方法 线程的生命周期 多线程编程的优势和风险 安全性问题 活跃性问题 性能问题 参考 [Java并发系列01]Thre ...
- Java多线程1:进程与线程概述
进程和线程 谈到多线程,就得先讲进程和线程的概念. 进程 进程可以理解为受操作系统管理的基本运行单元.360浏览器是一个进程.WPS也是一个进程,正在操作系统中运行的".exe"都 ...
最新文章
- python中一共有多少个关键字-Python中所有的关键字
- Arduino UNO WIFI开发板,学习必备开发套件
- Dnn's Event Logging API
- 什么是交互设计?交互设计是用来干什么的?
- android传感器_Android传感器
- php redis 集群 长连接池,php如何实现redis连接池
- 如何安装 Microsoft Office 兼容包,以便您可以在早期版本的 Microsoft Office 中打开和保存 Office Open XML 格式...
- Excel使用频率较高的数据处理和分析-----数据透视表
- 三维匹配_为什么你的倾斜摄影三维建模模型效果差,都进来看看
- 如何使用免费的WordPress FooGallery插件创建图像库
- Multiple Hypothesis Tracking Revisited
- 程序员键盘使用进阶技巧
- [机缘参悟-72]:深度思考-人生自省的四重境界:不觉、自觉、觉他、圆满
- 从目标检测到小目标检测
- alias别名设置及删除
- 网络课程学习视频的快进播放和去除鼠标移动视频暂停的问题
- 干货分享|串流游戏软件大比拼
- python杨辉三角输出指定行_使用python打印十行杨辉三角过程详解
- 二维数组的认识及其表示元素的两种方式
- 股市行情的真谛--威廉.D.江恩