java 中断线程 wait_Java 线程中断(interrupt)与阻塞 (park)的区别
很多Java开发人员(包括我),尤其是刚进入软件行业的新手,认为Java设置线程中断就是表示线程停止了,不往前执行了,
Thread.currentThread().interrupt()
其实不是这样的,线程中断只是一个状态而已,true表示已中断,false表示未中断
//获取线程中断状态,如果中断了返回true,否则返回false
Thread.currentThread().isInterrupted()
设置线程中断不影响线程的继续执行,但是线程设置中断后,线程内调用了wait、jion、sleep方法中的一种, 立马抛出一个 InterruptedException,且中断标志被清除,重新设置为false。
class Thread2 implements Runnable{
@Override
public void run() {
try {
System.out.println();
System.out.println(hread.currentThread().isInterrupted());//输出false
Thread.currentThread().interrupt();//当前线程中断
System.out.println("Thread.currentThread().isInterrupted());//输出true
Thread.sleep(3000);//中断后执行sleep会抛出异常
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("Thread.currentThread().isInterrupted());//输出false
}
}
}
该如何让线程真正停止不往前执行呢:
真正让线程停止下来(阻塞),Java提供了一个较为底层的并发工具类:LockSupport,该类常用的方法有两个,1
park(Object blocker) 表示阻塞指定线程,参数blocker当前线程对象 2 unpark(Thread thread) 唤醒指定线程,参数thread指定线程对象
示例:
public void test_LockSupport(){
Thread thread=new Thread(new Thread_park());
thread.start();//阻塞当前线程
Thread thread2=new Thread(new Thread_unpark(thread));
thread2.start();//唤醒被阻塞的线程
}
class Thread_park implements Runnable{
@Override
public void run() {
System.out.println("Thread_park开始");
LockSupport.park(this);//阻塞当前线程
System.out.println("Thread_park结束");
}
}
class Thread_unpark implements Runnable{
private Thread thread;
public Thread_unpark(Thread thread) {
this.thread = thread;
}
@Override
public void run() {
System.out.println("Thread_unpark开始");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
LockSupport.unpark(thread);//唤醒被阻塞的线程
System.out.println("Thread_unpark结束");
}
}
java 中断线程 wait_Java 线程中断(interrupt)与阻塞 (park)的区别相关推荐
- interrupt和park的区别
[Java]Java线程中断(Interrupt)与阻塞(park)的区别 对于很多刚接触编程的人来说,对于线程中断和线程阻塞两个概念,经常性是混淆起来用,单纯地认为线程中断与线程阻塞的概念是一致的, ...
- JAVA笔记13__创建线程/线程休眠/等待线程终止/线程中断/守护线程
/*** 线程:是进程的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个进程(单线程程序)* 多线程两种实现方法:1.继承Thread类 2.实现Runnable接口 ...
- Java并发编程—如何实现线程的超时中断
原文作者:大老二在不在 原文地址:Java中如何实现线程的超时中断 目录 背景 思路 实现 背景 之前在实现熔断降级组件时,需要实现一个接口的超时中断,意思是,业务在使用熔断降级功能时,在平台上设置了 ...
- Java中如何实现线程的超时中断
转载自 Java中如何实现线程的超时中断 背景 之前在实现熔断降级组件的时候,需要实现接口请求的超时中断.意思是,业务在使用熔断降级功能时,在平台上设置了一个超时时间,如果请求进入熔断器开始计时,接 ...
- java线程——中断线程+线程状态+线程属性(优先级)
[0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java线程--中断线程+线程状态+线程属性(优先级) 的相关知识: [1]中断线程 1.1 ...
- Java线程中断机制-如何中断线程
Java线程中断机制-如何中断线程 版权声明:本文为博主原创文章,欢迎指正或者转载. https://blog.csdn.net/qq_38663729/article/details/7823264 ...
- Java 线程实例二(终止线程、生产者/消费者问题、获取线程状态、获取所有线程、查看线程优先级、中断线程)
终止线程 Java中原来在Thread中提供了stop()方法来终止线程,但这个方法是不安全的,所以一般不建议使用. 本文向大家介绍使用interrupt方法中断线程. 使用interrupt方法来终 ...
- java终端线程_java多线程-中断线程
大纲: java线程的中断原则 中断相关方法 中断实例 一.java线程中断原则 java中断是一种协作机制,每一个线程的中断都由线程自己处理,其他线程只是给要中断的线程一个中断标志. 二.相关方法 ...
- java线程中断和终止线程运行
ava中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线程 ...
最新文章
- 探测参考信号(Sounding Reference Signal)
- 东北师范大学计算机科学与技术学科评估,东北的大学最强十校,工科是真强,2所211大学无缘前十...
- LoRa 之一 旧版驱动(sx12xxDrivers-V2.1.0)移植及驱动架构详解
- 2.IDA-数据显示窗口(反汇编窗口、函数窗口、十六进制窗口)
- Java学习笔记一和前言
- java swing jbutton_Java 反射
- python中文分词统计_python 实现中文分词统计
- innodb_lru_scan_depth
- python基础5-序列思维脑图
- Android来电铃声默认设置的实现方法与怎么设置语音来电的默认铃声
- 如何基于protobuf实现一个极简版的RPC(转载)
- Navicat Premium 15注册出现“rsa public key not find”
- docker nginx 跨域配置 uniapp h5 网页
- 苹果手机怎么查看已连接的wifi密码_WIFI密码忘了?教你查看手机已连接WIFI的密码...
- 电脑上安装的matlab软件打不开怎么办,电脑软件打不开没反应怎么办?
- matlab编程求卫星轨道长度,GPS卫星轨道计算及其MATLAB仿真.pdf
- 区块链学习——区块链的架构
- 原型设计(结对第一次)--社团管理系统
- Bootstrap实战 - 响应式布局
- 在 Excel 2007中手动为坐标图添加坐标轴标题