当前位置:网站首页>线程中断方法
线程中断方法
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();
}
}
边栏推荐
猜你喜欢
随机推荐
10.0 堆体系结构概述之元空间/永久代
emby,jellyfin,kodi系列
Database Principles Homework 3 — JMU
IPTV直播列表
深度解析 z-index
浅层了解欧拉函数
群晖NAS配置阿里云盘同步
Analysis of the implementation principle and detailed knowledge of v-model syntactic sugar and how to make the components you develop support v-model
Oracle入门 11 - Linux 开关机及系统进程命令
360推送-360推送工具-360批量推送工具
安装gstreamer开发依赖库到项目sysroot目录
批量翻译软件免费【2022最新版】
Project exercise - memorandum (add, delete, modify, check)
DDNS搭建
es6数组/数组对象求并集、交集、差集、去重、排序
Exam Questions Previous True Questions Wrong Bills [The Fourth Session] [Provincial Competition] [Group B]
对van-notice-bar组件定义内容进行设置
项目练习——备忘录(增删改查)
零样本学习&Domain-aware Visual Bias Eliminating for Generalized Zero-Shot Learning
选择排序法









