当前位置:网站首页>线程中断方法
线程中断方法
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();
}
}
边栏推荐
猜你喜欢
随机推荐
DDNS搭建
Zotero | Zotero translator插件更新 | 解决百度学术文献无法获取问题
【云原生】-Docker安装部署分布式数据库 OceanBase
自动翻译软件-批量批量自动翻译软件推荐
2022.7.29 数组
MySql的安装配置超详细教程与简单的建库建表方法
tidyverse笔记——tidyr包
高并发与多线程之间的难点对比(容易混淆)
外贸网站优化-外贸网站优化教程-外贸网站优化软件
Oracle入门 04 - Vmware虚拟机安装配置
银河麒麟高级服务器v10 sp1 手动加载Raid卡驱动
Zabbix 配置详解
Oracle入门 09 - Linux 文件上传与下载
成员内部类使用方式(工作)
tidyverse笔记——管道函数
简单谈谈Feign
frp内网穿透服务
(border-box) The difference between box model w3c and IE
对van-notice-bar组件定义内容进行设置
使用powerDesigner反向工程生成Entity









