当前位置:网站首页>线程中断方法
线程中断方法
2022-07-31 05:41:00 【极速小乌龟】
一、通过volatile实现线程中断
因为volatile能保证在多线程之间,一旦变量修改,能够立马通知到其他持有该变量的线程值被改变。所以我们可以利用volatile这个特性来实现线程中断。
package com.llx.springsecurity.util;
import java.util.concurrent.TimeUnit;
/**
* description: ThreadInterrupt <br>
*
* @date: 2022/7/30 0030 下午 3:47 <br>
* @author: William <br>
* version: 1.0 <br>
*/
public class ThreadInterrupt {
static volatile boolean isStop = false;
public static void main(String[] args) {
new Thread(() ->{
while(true){
if(isStop){
System.out.println("=============线程终止============");
break;
}
System.out.println("=============任务进行============");
}
},"t1").start();
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(() ->{
isStop = true;
System.out.println("===========设置状态为true===========");
},"t2").start();
}
}
二、通过AtomicBoolean实现线程中断
package com.llx.springsecurity.util;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* description: ThreadInterrupt <br>
*
* @date: 2022/7/30 0030 下午 3:47 <br>
* @author: William <br>
* version: 1.0 <br>
*/
public class ThreadInterrupt {
static AtomicBoolean aBoolean = new AtomicBoolean(false);
public static void main(String[] args) {
new Thread(() ->{
while(true){
if(aBoolean.get()){
System.out.println("=============线程被中断============");
break;
}
System.out.println("=============任务执行===============");
}
},"t1").start();
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(() ->{
aBoolean.set(true);
System.out.println("================设置状态为true=================");
},"t2").start();
}
}
三、通过interrup实现线程中断
interrupt() :设置线程状态为true
isInterrupt():查询当前线程阻塞状态
interrupted():查询当前线程阻塞状态,并将状态设置为false
备注:操作线程不能处于sleep,wait,join,不然会抛出异常
package com.llx.springsecurity.util;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* description: ThreadInterrupt <br>
*
* @date: 2022/7/30 0030 下午 3:47 <br>
* @author: William <br>
* version: 1.0 <br>
*/
public class ThreadInterrupt {
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
while (true) {
if (Thread.currentThread().isInterrupted()) {
System.out.println("=============线程被中断============");
break;
}
System.out.println("=============任务执行===============");
}
}, "t1");
t1.start();
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(() ->{
t1.interrupt();
System.out.println("================设置中断状态为true=================");
},"t2").start();
}
}
边栏推荐
猜你喜欢
随机推荐
LeetCode刷题——摆动序列#376#Medium
4-1-7 二叉树及其遍历 家谱处理 (30 分)
vmware搭建redis集群遇到问题
04-SDRAM:读操作(突发)
芯塔电子斩获第十一届中国双创大赛芜湖赛区桂冠
使用powerDesigner反向工程生成Entity
2021-10-10
运行 npm 会弹出询问 “你要如何打开这个文件?“
SSH远程管理
Zabbix入门
Oracle入门 07 - Linux 操作系统安装配置(REHL 7.x)
【云原生】-Docker容器迁移Oracle到MySQL
LXC的安装与配置使用
CHI论文阅读(1)EmoGlass: an End-to-End AI-Enabled Wearable Platform for Enhancing Self-Awareness of Emoti
Oracle入门 09 - Linux 文件上传与下载
Openssl一键自签证书
浅析伪类和伪元素
接口报错no message avaliable
Debian 10 iptables (防火墙)配置
postgresql源码学习(33)—— 事务日志⑨ - 从insert记录看日志写入整体流程