当前位置:网站首页>线程中断方法
线程中断方法
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();
}
}
边栏推荐
猜你喜欢
随机推荐
进程和计划任务管理
Project exercise - memorandum (add, delete, modify, check)
服务器和客户端信息的获取
网盘程序 ZFile安装
编辑时过滤当前节点及根据限制的层数过滤数据
12.0 堆参数调优入门之GC收集日志信息
Database Principles Homework 3 — JMU
2022.7.29 数组
LVM和磁盘配额
Oracle入门 10 - Linux 设备类型与文件目录结构
小实战项目之——吃货联盟订餐系统
Oracle入门 11 - Linux 开关机及系统进程命令
4-1-7 二叉树及其遍历 家谱处理 (30 分)
Database Principles Homework 2 — JMU
磁盘和储存管理
Oracle入门 09 - Linux 文件上传与下载
MySQL笔记下
HuffmanTree
OneManager搭建
Oracle入门 12 - Linux 磁盘分区及LVM实战









