当前位置:网站首页>线程中断方法
线程中断方法
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();
}
}
边栏推荐
猜你喜欢
随机推荐
自动翻译软件-批量批量自动翻译软件推荐
批量翻译软件免费【2022最新版】
Redux状态管理
shell之条件语句(test、if、case)
FRP穿透教程
银河麒麟服务器v10 sp1安装.net6
群晖NAS配置阿里云盘同步
client
【云原生】3.3 Kubernetes 中间件部署实战
如何在uni-app中选择一个合适的UI组件库
拉格朗日插值及其应用
Debian 10 iptables (防火墙)配置
Koa框架的基本使用
cp 的用法
常用命令讲解
MySQL笔记下
DNS域名解析服务
postgresql源码学习(34)—— 事务日志⑩ - 全页写机制
What is float?What is document flow?Several ways and principles of clearing floats?What is BFC, how to trigger BFC, the role of BFC
网盘程序 ZFile安装









