jdk stop与interrupt的区别
让线程终止的方法
调用Thread实例方法 stop()
特点
线程会立即终止,可能会丢失任务,不可控. 官方已废弃该方法
调用 Thread实例方法 interrupt()
特点
不会主动终止线程, 只是发出中断信号, 由程序员自己控制是否要终止线程
api 方法
public void interrupt()//发出中断指令
public boolean isInterrupted()//判断是否有中断标志
public static boolean interrupted()//判断是否被中断,并且清除当前中断状态
实验代码
package com.nanxhs.concurrent.thread;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;
/**
* 序号生成任务器
*
* @author: haibin.tang
* @date: 2021/1/27
*/
public class GenericSequenceRunner implements Runnable {
private Set<Integer> codeList = new HashSet<>();
@Override
public void run() {
while (true) {
// 判断是否有中断标志
if (codeList.size() > 10 && Thread.currentThread().isInterrupted()) {
System.out.println(Thread.currentThread().getName() + "收到线程中断信号并且生成的code数量大于10,结束生成code任务");
break;
}
int code = (int)(Math.random() * 10000);
codeList.add(code);
System.out.println(Thread.currentThread().getName() + " 生成code -->> " + code);
LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(2));
}
}
}
package com.nanxhs.concurrent.thread;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;
/**
* 线程结束测试类
*
* @author: haibin.tang
* @date: 2021/1/27
*/
public class ThreadOverMain {
public static void main(String[] args) {
Thread stopRunner = new Thread(new GenericSequenceRunner());
Thread interruptedRunner = new Thread(new GenericSequenceRunner());
stopRunner.start();
interruptedRunner.start();
LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(5));
//线程立即就终止了
stopRunner.stop();
//线程不会立即终止,是否终止由代码逻辑自己控制
interruptedRunner.interrupt();
}
}
实验结果
Thread-0 生成code -->> 5327
Thread-1 生成code -->> 9789
Thread-0 生成code -->> 2338
Thread-1 生成code -->> 8077
Thread-0 生成code -->> 4298
Thread-1 生成code -->> 3600
Thread-1 生成code -->> 6519
Thread-1 生成code -->> 1858
Thread-1 生成code -->> 5675
Thread-1 生成code -->> 6719
Thread-1 生成code -->> 735
Thread-1 生成code -->> 893
Thread-1 生成code -->> 765
Thread-1 生成code -->> 1083
Thread-1收到线程中断信号并且生成的code数量大于10,结束生成code任务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗