线程中断方法
Posted 听风者-better
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程中断方法相关的知识,希望对你有一定的参考价值。
线程中断方法
- Thread.interrupt():中断线程。这里的中断线程并不会立即停止线程,而是设置线程的中断状态为true(默认是flase);
- Thread.interrupted():测试当前线程是否被中断。线程的中断状态受这个方法的影响,意思是调用一次使线程中断状态设置为true,连续调用两次会使得这个线程的中断状态重新转为false;
- Thread.isInterrupted():测试当前线程是否被中断。与上面方法不同的是调用这个方法并不会影响线程的中断状态。
直接通过interrupt方法中断线程
public static void main(String[] args) throws InterruptedException
Thread thread = new Thread(() ->
System.out.println("线程启动了");
for (int i = 0; i < 1000; i++)
System.out.println(i);
System.out.println("线程结束了");
);
thread.start();
Thread.sleep(1L);
thread.interrupt();
输出结果:
线程启动了
0
1
2
3
4
...
98
99
线程结束了
直接使用interrupt方法,线程也是执行完代码后正常退出
通过interrupt方法+isInterrupted()中断线程
public static void main(String[] args) throws InterruptedException
Thread thread = new Thread(() ->
System.out.println("线程启动了");
for (int i = 0; i < 100; i++)
System.out.println(i);
//添加线程状态判断,跳出循环
if (Thread.currentThread().isInterrupted())
break;
System.out.println("线程结束了");
);
thread.start();
Thread.sleep(1L);
thread.interrupt();
线程启动了
0
1
2
3
...
22
23
24
25
26
线程结束了
interrupted()方法
public static void main(String[] args) throws InterruptedException
Thread thread = new Thread(() ->
System.out.println("线程启动了");
for (int i = 0; i < 100; i++)
System.out.println(i);
//添加线程状态判断,跳出循环
if (Thread.currentThread().isInterrupted())
System.out.println("当前线程:" + Thread.currentThread().getName() + " 第一次interrupted():" + Thread.currentThread().interrupted());
System.out.println("当前线程:" + Thread.currentThread().getName() + " 第二次interrupted():" + Thread.currentThread().interrupted());
break;
System.out.println("线程结束了");
, "t1");
thread.start();
Thread.sleep(1L);
thread.interrupt();
//设置主线程中断
Thread.currentThread().interrupt();
System.out.println("当前线程:" + Thread.currentThread().getName() + " 第一次interrupted():" + Thread.currentThread().interrupted());
System.out.println("当前线程:" + Thread.currentThread().getName() + " 第二次interrupted():" + Thread.currentThread().interrupted());
输出结果
线程启动了
0
1
...
16
当前线程:t1 第一次interrupted():true
当前线程:main 第一次interrupted():true
当前线程:main 第二次interrupted():false
当前线程:t1 第二次interrupted():false
线程结束了
以上是关于线程中断方法的主要内容,如果未能解决你的问题,请参考以下文章
Thread的中断机制(interrupt),循环线程停止的方法
中断了吗?interruptinterrupted isInterrupted 区别
线程中断:Thread类中interrupt()interrupted()和 isInterrupted()方法详解