本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、中断理论
大白话就是,中断机制是一种协商,不会立刻给你停掉。并且协商中断后,后序具体怎么做需要你自己指定。
二、JUC中的中断
在java.lang.Thread类包下,线程中断机制主要有三种方法:
如何中断一个线程?——在什么场景下使用上述方法 也就是说这三个方法的特性是什么:
- 1、返回当前线程中的中断状态,测试当前状态是否被中断。也就是说返回flag标志位。
- 2、将当前线程的中断状态清零并重新设为false,清楚线程中断状态。
三、实现中断机制
1、如何停止中断运行中的线程
1、通过一个volatile变量
具体得:T1线程和T2线程共享一个volatile变量,当T2想要T1停止时,对这个volatile变量进行修改,当T1读取后进行中断。符合中断机制理论中协商思想:应由线程自己决定是否中断。
2、AtomicBoolean实现
原子布尔型,相较于volatile方法实现,只是修改了API
3、==interrupt实现==
实现原理:在需要中断的线程中不断监听中断状态,一旦发生中断,就执行相应的中断处理业务逻辑停止线程。(思想同上面两种方法)
示例代码:
void interrupt()源码:
- 当该线程阻塞调用wait()...方法,其他线程调用interrupt,则该线程中断阻塞状态并抛出InterruptedException。
实例方法boolean isInterrupted()源码:
- 其中传递的ClearInterrupt参数,就是说明中断标志位是否需要重置。
总结:
2、当线程中断标志位被设为true,是不是立即停止线程?
- 会抛出InterruptException异常,并且程序会一直循环下去
==那么为什么要在异常处再调用一次呢?== 因为上面讲过,当遇到wait、sleep等阻塞方法时,会立即中断阻塞状态,并且中断标志flag会复位,也就是又回到了false。
3、静态方法isInterrupted()
上面讲到此方法的特性,不仅查询flag状态,还会将其复位。也就是说两次调用它,可能第二次flag返回的为false。 源码分析:
- ClearInterrupted参数上面讲过,flag复不复位由此参数决定。
# []()一、中断理论
\
大白话就是,中断机制是一种协商,不会立刻给你停掉。并且协商中断后,后序具体怎么做需要你自己指定。
# []()二、JUC中的中断
在java.lang.Thread类包下,线程中断机制主要有三种方法:\

如何中断一个线程?——在什么场景下使用上述方法\
也就是说这三个方法的特性是什么:


- 1、返回当前线程中的中断状态,测试当前状态是否被中断。也就是说返回flag标志位。
- 2、将当前线程的中断状态清零并重新设为false,清楚线程中断状态。

# []()三、实现中断机制

### []()1、如何停止中断运行中的线程
1、通过一个volatile变量\
具体得:T1线程和T2线程共享一个volatile变量,当T2想要T1停止时,对这个volatile变量进行修改,当T1读取后进行中断。符合中断机制理论中协商思想:应由线程自己决定是否中断。\

2、AtomicBoolean实现\
原子布尔型,相较于volatile方法实现,只是修改了API\
\
3、*interrupt实现*\
实现原理:在需要中断的线程中不断监听中断状态,一旦发生中断,就执行相应的中断处理业务逻辑停止线程。(思想同上面两种方法)\
示例代码:\

**void interrupt()源码**:\
\
\

- 当该线程阻塞调用wait()…方法,其他线程调用interrupt,则该线程中断阻塞状态并抛出InterruptedException。
**实例方法boolean isInterrupted()源码:**\

- 其中传递的ClearInterrupt参数,就是说明中断标志位是否需要重置。
总结:\

### []()2、当线程中断标志位被设为true,是不是立即停止线程?

- 会抛出InterruptException异常,并且程序会一直循环下去

*那么为什么要在异常处再调用一次呢?*\
因为上面讲过,当遇到wait、sleep等阻塞方法时,会立即中断阻塞状态,并且中断标志flag会复位,也就是又回到了false。
### []()3、静态方法isInterrupted()
上面讲到此方法的特性,不仅查询flag状态,还会将其复位。也就是说两次调用它,可能第二次flag返回的为false。\
**源码分析:**

- ClearInterrupted参数上面讲过,flag复不复位由此参数决定。
语法说明
标题
文本样式
列表
图片
链接
目录
代码片
表格
注脚
注释
自定义列表
LaTeX 数学公式
插入甘特图
插入UML图
插入Mermaid流程图
插入Flowchart流程图
插入类图
快捷键
标题复制
一级标题
二级标题
三级标题
四级标题
五级标题
六级标题
# []()一、中断理论
# []()二、JUC中的中断
# []()三、实现中断机制
### []()1、如何停止中断运行中的线程
### []()2、当线程中断标志位被设为true,是不是立即停止线程?
### []()3、静态方法isInterrupted()
Markdown 2258 字数 63 行数 当前行 1, 当前列 0
HTML 892 字数 30 段落