很多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)的区别相关推荐

  1. interrupt和park的区别

    [Java]Java线程中断(Interrupt)与阻塞(park)的区别 对于很多刚接触编程的人来说,对于线程中断和线程阻塞两个概念,经常性是混淆起来用,单纯地认为线程中断与线程阻塞的概念是一致的, ...

  2. JAVA笔记13__创建线程/线程休眠/等待线程终止/线程中断/守护线程

    /*** 线程:是进程的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个进程(单线程程序)* 多线程两种实现方法:1.继承Thread类 2.实现Runnable接口 ...

  3. Java并发编程—如何实现线程的超时中断

    原文作者:大老二在不在 原文地址:Java中如何实现线程的超时中断 目录 背景 思路 实现 背景 之前在实现熔断降级组件时,需要实现一个接口的超时中断,意思是,业务在使用熔断降级功能时,在平台上设置了 ...

  4. Java中如何实现线程的超时中断

    转载自  Java中如何实现线程的超时中断 背景 之前在实现熔断降级组件的时候,需要实现接口请求的超时中断.意思是,业务在使用熔断降级功能时,在平台上设置了一个超时时间,如果请求进入熔断器开始计时,接 ...

  5. java线程——中断线程+线程状态+线程属性(优先级)

    [0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java线程--中断线程+线程状态+线程属性(优先级) 的相关知识: [1]中断线程 1.1 ...

  6. Java线程中断机制-如何中断线程

    Java线程中断机制-如何中断线程 版权声明:本文为博主原创文章,欢迎指正或者转载. https://blog.csdn.net/qq_38663729/article/details/7823264 ...

  7. Java 线程实例二(终止线程、生产者/消费者问题、获取线程状态、获取所有线程、查看线程优先级、中断线程)

    终止线程 Java中原来在Thread中提供了stop()方法来终止线程,但这个方法是不安全的,所以一般不建议使用. 本文向大家介绍使用interrupt方法中断线程. 使用interrupt方法来终 ...

  8. java终端线程_java多线程-中断线程

    大纲: java线程的中断原则 中断相关方法 中断实例 一.java线程中断原则 java中断是一种协作机制,每一个线程的中断都由线程自己处理,其他线程只是给要中断的线程一个中断标志. 二.相关方法 ...

  9. java线程中断和终止线程运行

    ava中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线程 ...

最新文章

  1. 探测参考信号(Sounding Reference Signal)
  2. 东北师范大学计算机科学与技术学科评估,东北的大学最强十校,工科是真强,2所211大学无缘前十...
  3. LoRa 之一 旧版驱动(sx12xxDrivers-V2.1.0)移植及驱动架构详解
  4. 2.IDA-数据显示窗口(反汇编窗口、函数窗口、十六进制窗口)
  5. Java学习笔记一和前言
  6. java swing jbutton_Java 反射
  7. python中文分词统计_python 实现中文分词统计
  8. innodb_lru_scan_depth
  9. python基础5-序列思维脑图
  10. Android来电铃声默认设置的实现方法与怎么设置语音来电的默认铃声
  11. 如何基于protobuf实现一个极简版的RPC(转载)
  12. Navicat Premium 15注册出现“rsa public key not find”
  13. docker nginx 跨域配置 uniapp h5 网页
  14. 苹果手机怎么查看已连接的wifi密码_WIFI密码忘了?教你查看手机已连接WIFI的密码...
  15. 电脑上安装的matlab软件打不开怎么办,电脑软件打不开没反应怎么办?
  16. matlab编程求卫星轨道长度,GPS卫星轨道计算及其MATLAB仿真.pdf
  17. 区块链学习——区块链的架构
  18. 原型设计(结对第一次)--社团管理系统
  19. Bootstrap实战 - 响应式布局
  20. 在 Excel 2007中手动为坐标图添加坐标轴标题

热门文章

  1. Excel电子表格输入技巧大比拼
  2. Dreamweaver8注册码
  3. 第四次作业——黄渗茹
  4. 去中心化交易所前路明朗,基于EOS的去中心化交易所力拔头筹
  5. Spring Boot配置Mysql后无法根据java实体类生成table
  6. 绝不是剧透!全角度解析EMC Unity绝妙重头戏
  7. 光伏双反闹剧何时休?
  8. 大道至简第五章阅读笔记
  9. acdream 1222 Quantization Problem [dp]
  10. 正则表达式中的小括号用法