interrupt,interrupted,isInterrupted

2023-12-12 08:48

本文主要是介绍interrupt,interrupted,isInterrupted,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

interrupt()

其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行。

该方法经常用来“吵醒休眠的线程“。 当一些线程调用sleep() 方法处于休眠状态时,一个占有CPU资源的线程可以让休眠的线程调用interrupt()方法“吵醒”自己。即导致休眠的线程发火说呢过InterruptException异常,从而结束休眠,重新排队等待CPU资源

 

interrupted()

作用是测试当前线程是否被中断(检查中断标志),返回一个boolean并清除中断状态,第二次再调用时中断状态已经被清除,将返回一个false。

 

isInterrupted ()

作用是只测试此线程是否被中断 ,不清除中断状态。

 

如:

public class Threadinterrup extends Thread {public  void run() {for (int i = 0; i < 10; i++) {//            try {
//                System.out.println("**********************in run()-这个线程休眠20秒");
//                Thread.sleep(20000);
//                System.out.println("**********************in run-继续进行!");
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }System.out.println("结果:"+(i+1));}}}
public class ThreadinterrupText {public static void main(String[] arg){Threadinterrup threadtest=new Threadinterrup();Thread thread=new Thread(threadtest);thread.start();  //启动 n 个线程//但实际上只是给线程设置一个中断标志thread.interrupt();//作用是只测试此线程是否被中断 ,不清除中断状态System.out.println("第一次调用thread.isInterrupted():"+thread.isInterrupted());System.out.println("第二次调用thread.isInterrupted():"+thread.isInterrupted());//作用是测试当前线程是否被中断(检查中断标志)System.out.println("第三次调用thread.interrupted():"+thread.interrupted());System.out.println("thread是否存活:"+thread.isAlive());}
}结果:

第一次调用thread.isInterrupted():true
第二次调用thread.isInterrupted():true
第三次调用thread.interrupted():false
thread是否存活:true
结果:1
结果:2
结果:3
结果:4
结果:5
结果:6
结果:7
结果:8
结果:9
结果:10

这篇关于interrupt,interrupted,isInterrupted的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483972

相关文章

sqlite3的db.interrupt方法深入解析

在Node.js环境中,sqlite3库是一个广受欢迎的轻量级数据库库,它为开发者提供了一个简洁的API来与SQLite数据库进行交互。在处理长时间运行或复杂的数据库查询时,有时可能需要中断这些查询。sqlite3库提供了db.interrupt方法来实现这一功能。本文将深入解析db.interrupt方法,包括其API函数定义和相应的代码示例解释。 一、db.interrupt方法简介 db

理解interrupt()方法

java interrupt()方法只是设置线程的中断标记,当对处于阻塞状态的线程调用interrupt方法时(处于阻塞状态的线程是调用sleep, wait, join 的线程),会抛出InterruptException异常,而这个异常会清除中断标记。因此,根据这两个思路,不同的run()方法设计,会导致不同的结果,下面是示例,并说明了运行了结果和原因 package com.concurr

测试环境频繁报:RedisCommandInterruptedException: Command interrupted

比较奇葩的是:本机,开发,生产都没问题,就测试环境有这问题,导致docker容器不停重启,就是起不来。 本机中断程序,同样也会报这个问题 排查了半天,找到原因,应该是redis在频繁取到空值的情况下,就会出现线程被中断的情况,解决办法是在取到空值的情况下让线程睡100ms(Thread.sleep(100L))。 这篇文章有借鉴价值: https://blog.csdn.net/gun

MPC5748G之spi polling interrupt

开发环境: 硬件:MPC5748G软件:S32 Design Studio for Power Architecture Version 2017.R1外设:W25Q64 spi引脚: PI[6] CS0_2 xxxPE[15] SCLK_2 819PG[15] SOUT_2 xxxPG[14] SIN_2 818 步骤及注意事项: 1.配置好外设及系统时钟2.初始化sp

MPC5748G之can polling interrupt

开发环境: 硬件:MPC5748G软件:S32 Design Studio for Power Architecture Version 2017.R1外设:TPS43331 I2CTJA1043 CAN can引脚: PB0PB1 步骤及注意事项: 1.配置好外设及系统时钟2.初始化can设置1)轮询模式2)中断模式a.需要在中断向量表中配置中断函数b.初始化中断寄存器P

MPC5748G之adc polling interrupt

开发环境: 硬件:MPC5748G软件:S32 Design Studio for Power Architecture Version 2017.R1 adc引脚: PB5 步骤及注意事项: 1.配置好外设及系统时钟2.初始化adc设置1)轮询模式2)中断模式a.需要在中断向量表中配置中断函数b.初始化中断寄存器PSRc.使能adc转换中断 遇到的问题: EOC与ECH在

MPC5748G之i2c polling interrupt

开发环境: 硬件:MPC5748G软件:S32 Design Studio for Power Architecture Version 2017.R1外设:24LC256 I2C引脚: PE8PE9 步骤及注意事项: 1.配置好外设及系统时钟2.初始化I2C设置1)轮询模式2)中断模式a.需要在中断向量表中配置中断函数b.初始化中断寄存器PSRc.使能I2C接收发送中断

MPC5748G之uart polling interrupt

开发环境: 硬件:MPC5748G软件:S32 Design Studio for Power Architecture Version 2017.R1 串口引脚: PC8PC9 步骤及注意事项: 1.配置好外设及系统时钟2.初始化串口设置1)轮询模式2)中断模式a.需要在中断向量表中配置中断函数b.初始化中断寄存器PSRc.使能串口接收发送中断3.然后就可以愉快的开启串口终

imx6ull Enhanced Periodic Interrupt Timer (EPIT)

一、overview EPIT是一个32位的计时器,能够在处理器很少干预的情况下以固定的时间间隔提供精确的中断。软件使能后,EPIT就开始计数。IMX6ULL有2个EPIT定时器。其框图如下所示: 1.1 epit 特性 EPIT具有以下主要特性: •可选择时钟源的32位递减计数器 •12位预分频器,用于对输入时钟进行分频 •可即时编程的计数器值 •可以设置在低功耗和调试模式下,计数器仍

svn cleanup failed-previous operation has not finished; run cleanup if it was interrupted

刚刚在用svn提交代码的时候出现了标题中出现的问题,经过google查到了解决问题的方法 方法如下, 一、下载sqlite3.exe,地址:http://www.sqlite.org/2015/sqlite-shell-win32-x86-3081002.zip 二、解压后,将sqlite3.exe 放到 项目 与 .svn 同级别的目录下面 三、运行cmd 到 .svn所在目录,运行 s