java线程中断和终止线程运行
ava中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止。但有时需要在任务正在运行时取消他们,使得线程快速结束。对此Java并没有提供任何机制。但是我们可以通过Java提供的线程中断机制来实现。
首先来看Thread类三个和中断有关的方法:
public class Thread {// 发出一个中断请求,把标志位设定为中断状态,不会终止线程运行。// 其他线程试图调用该方法,会检测是否有权限中断该线程(正常情况// 下不会存在权限问题,这里可以忽略)public void interrupt() { ... }// 检测标志位是否为中断的状态public boolean isInterrupted() { ... }// 清除当前线程的标志位的中断状态,返回是否为中断状态public static boolean interrupted() { ... }... }
既然线程中断不会终止线程的运行,那么如何通过线程中断来实现终止线程运行呢?
我们知道一些阻塞线程的方法会抛出InterruptedException表示线程中断发生,在这种情况下就可以使用线程中断来终止线程的运行:
public class TestInterrupt {public static void main(String[] args){BlockingQueue<Object> ObjectQueue = new LinkedBlockingQueue<Object>();Consumer consumer = new Consumer(ObjectQueue);Thread t = new Thread(consumer);t.start();// 等待线程的启动try{Thread.sleep(1000);}catch (InterruptedException e){e.printStackTrace();}// 中断线程t.interrupt();}}class Consumer implements Runnable {private final BlockingQueue<Object> ObjectQueue;public Consumer(BlockingQueue<Object> ObjectQueue){if (ObjectQueue == null){throw new IllegalArgumentException("messageQueue cannot be null");}this.ObjectQueue = ObjectQueue;}@Overridepublic void run(){boolean isRunning = true;while (isRunning){try{// take方法阻塞时会因为线程中断抛出中断异常System.out.println(ObjectQueue.take());}catch (InterruptedException e){// 一旦抛出中断异常,线程的中断状态就会被清除,这个时候调用// Thread的isInterrupted()方法返回的是falseisRunning = false;System.out.println("Cancelled");}}} }
很多任务执行的服务程序的逻辑和上面的例子很类似,都可以使用这种方法来终止线程的运行。
转载于:https://www.cnblogs.com/zhangxiaopeng/p/4811844.html
java线程中断和终止线程运行相关推荐
- 泥瓦匠聊并发编程基础篇:线程中断和终止
原文:www.spring4all.com 1 线程中断 1.1 什么是线程中断? 线程中断是线程的标志位属性.而不是真正终止线程,和线程的状态无关.线程中断过程表示一个运行中的线程,通过其他线程调用 ...
- java中的强行终止线程的执行
不合理 package com.bjpowernode.java.thread; /* 在java中怎么强行终止一个线程的执行.这种方式存在很大的缺点:容易丢失数据.因为这种方式是直接将线程杀死了,线 ...
- linux c之使用pthread_create创建线程pthread_join等待线程和pthread_exit终止线程总结
1.介绍API 1.pthread_create函数 函数简介 pthread_create是UNIX环境创建线程函数 头文件 #include<pthread.h> 函数声明 int p ...
- c语言中终止线程的方法,终止线程优雅不使用TerminateThread()
TerminateThread是一个坏主意,特别是如果你的线程使用同步对象,如互斥体.它可能导致未发布的内存和句柄,并导致死锁,所以你是正确的,你需要做别的事情. 通常,线程终止的方式是从定义线程的函 ...
- java 线程退出cmd_java 线程的终止与线程中断
关于线程终止: 1.一般来讲线程在执行完毕后就会进入死亡状态,那该线程自然就终止了. 2.一些服务端的程序,可能在业务上需要,常驻系统.它本身是一个无穷的循环,用于提供服务.那对于这种线程我们该如何结 ...
- Java线程池ThreadPoolExecutor使用和分析(三) - 终止线程池原理
相关文章目录: Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理 Java线程池Thr ...
- 终止线程的2种方法。标记法和中断
引言 在原来的jdk版本中: 提供了暂停,恢复,终止线程的方法,分别是suspend(),resume(),stop(); 但是它们都存在缺陷,比如暂停suspend()方法在调用后,线程不会释放资源 ...
- java 中断线程 wait_Java 线程中断(interrupt)与阻塞 (park)的区别
很多Java开发人员(包括我),尤其是刚进入软件行业的新手,认为Java设置线程中断就是表示线程停止了,不往前执行了, Thread.currentThread().interrupt() 其实不是这 ...
- MySQL 查看和终止正在运行的连接线程
文章目录 使用 SHOW 命令查看连接线程 使用 information_schema.processlist 使用 performance_schema.threads 使用 mysqladmin ...
最新文章
- 【ACM】杭电OJ 2149
- 在服务器虚拟化架构中有哪些技术功能和益处
- 【转】几种数据库的大数据批量插入
- 安卓pdf阅读器_2020年双十一有哪些电纸书、电子书阅读器值得买?Kindle、掌阅、文石、科大讯飞哪个好?...
- Linux终端命令工具修改语言切换中文
- 计算机1级b知识点,初中信息技术等级考试知识点
- Ajax的回调函数(js与JQuery写法)
- HTML5 通过Vedio标签实现视频循环播放
- 编写一个计算图形面积和周长的程序
- K8s 亲和性和非亲和性(Affinity)
- 人工智能发展史(读书笔记)
- 4行代码 超级简单 html/css 实现平移动画
- java 设计模式 常用21种
- python模拟鼠标点击和键盘输入的操作_python模拟鼠标点击和键盘输入的操作
- linux系统——管道
- staruml 时序图操作
- ctP2ISP:使用卷积和数据增强的转换器预测蛋白质-蛋白质相互作用位点
- C语言小新意-破壳日
- 基于QT实现简易音视频播放器
- 在国内考是考CISP还是CISSP呢?
热门文章
- snipaste安装和使用_snipaste替代品 amp; linux截图解决方案-截图、贴图工具Flameshot...
- 让我们了解下什么是智能客服(问答)
- 从小白到大数据人工智能专家的学习历程-送100G学习资料
- 期末计算机课总结100字,学期总结:学期总结100字
- android上方导航条跳转页面,Native Navigation导航组件的使用说明
- 加密模式 openssl sm4_OpenSSL/GmSSL 动态引擎
- C++ ------------------- string类介绍
- 盘点2012中国承载网十大事件(转)
- 软件测试中的风控,测试过程中会遇到哪些风险和机会?
- 山东民办计算机专业排名2015,2021年山东最好的民办大学排名