JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

java线程终止 interrupt 关键字详解

wys521 2024-11-23 23:45:36 精选教程 17 ℃ 0 评论

interrupt:设置线程的打断标记,线程调用interrupt并不是终止该线程的运行,而是将该线程的打断标记设置为true;该线程在每次执行的时候,判断一下打断标志是否为true,如果为true那么可以终止该线程的运行;

重点:

1、如果线程处于sleep、wait、join的时候调用了interrupt,那么线程会进入InterruptedException异常里面,并会重置线程的打断标记为false;

2、如果线程在正常运行的时候,调用了Interrupt,那么该线程的打断标记变为true,并且不会被重置为false;


isInterrupted:获取该线程的打断标记值,true或者false;

Interrupted:获取该线程的打断标记值,并且会重置值为false;


以下通过代码演示,处于睡眠状态的线程被打断后,会重置打断的标记为false;

package pro01;

public class Test01 {

	public static void main(String[] args) throws Exception{
		Thread t1 = new Thread( () ->  {
			System.out.println("t1线程开始执行!!!");
			try {
				//t1线程睡眠10秒钟
				System.out.println("t1线程睡眠10秒钟!!!");
				Thread.sleep(10000);
			} catch (InterruptedException e) {
				System.out.println("t1线程睡眠被打断!!!");
				e.printStackTrace();
			}
			
		} ,"t1"); 
		
		//启动t1线程
		t1.start();
		
		//主线程睡眠一秒钟
		Thread.sleep(1000);
		System.out.println("1秒后主线程打断t1线程睡眠");
		//打断t1线程睡眠
		t1.interrupt();
		System.out.println("t1线程打断标记为:"+t1.isInterrupted());
		
	}
}

执行结果:

t1线程开始执行!!!
t1线程睡眠10秒钟!!!
1秒后主线程打断t1线程睡眠
java.lang.InterruptedException: sleep interrupted
	at java.lang.Thread.sleep(Native Method)
	at pro01.Test01.lambda$0(Test01.java:12)
	at java.lang.Thread.run(Thread.java:745)
t1线程睡眠被打断!!!
t1线程打断标记为:false

以下是以上代码的完整截图

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表