Skip to content

Commit 0f422d7

Browse files
committed
✨ Introducing new features. 线程响应中断
1 parent 123c8a5 commit 0f422d7

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

MD/concurrent/thread-communication.md

+34
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,40 @@ CountDownLatch 也是基于 AQS(AbstractQueuedSynchronizer) 实现的,更多
291291

292292
## 线程响应中断
293293

294+
```java
295+
public class StopThread implements Runnable {
296+
@Override
297+
public void run() {
298+
299+
while ( !Thread.currentThread().isInterrupted()) {
300+
// 线程执行具体逻辑
301+
System.out.println(Thread.currentThread().getName() + "运行中。。");
302+
}
303+
304+
System.out.println(Thread.currentThread().getName() + "退出。。");
305+
306+
}
307+
308+
public static void main(String[] args) throws InterruptedException {
309+
Thread thread = new Thread(new StopThread(), "thread A");
310+
thread.start();
311+
312+
System.out.println("main 线程正在运行") ;
313+
314+
TimeUnit.MILLISECONDS.sleep(10) ;
315+
thread.interrupt();
316+
}
317+
318+
319+
}
320+
```
321+
322+
可以采用中断线程的方式来通信,调用了 `thread.interrupt()` 方法其实就是将 thread 中的一个标志属性置为了 true。
323+
324+
并不是说调用了该方法就可以中断线程,如果不对这个标志进行响应其实是没有什么作用的(这里对这个标志进行了判断)。
325+
326+
但是如果抛出了 InterruptedException 异常,该标志就会被 JVM 重置为 false。
327+
294328
## 线程池 awaitTermination() 方法
295329

296330
## 管道通信
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.crossoverjie.concurrent;
2+
3+
import java.util.concurrent.TimeUnit;
4+
5+
/**
6+
* Function:
7+
*
8+
* @author crossoverJie
9+
* Date: 16/03/2018 01:41
10+
* @since JDK 1.8
11+
*/
12+
public class StopThread implements Runnable {
13+
@Override
14+
public void run() {
15+
16+
while ( !Thread.currentThread().isInterrupted()) {
17+
// 线程执行具体逻辑
18+
System.out.println(Thread.currentThread().getName() + "运行中。。");
19+
}
20+
21+
System.out.println(Thread.currentThread().getName() + "退出。。");
22+
23+
}
24+
25+
public static void main(String[] args) throws InterruptedException {
26+
Thread thread = new Thread(new StopThread(), "thread A");
27+
thread.start();
28+
29+
System.out.println("main 线程正在运行") ;
30+
31+
TimeUnit.MILLISECONDS.sleep(10) ;
32+
thread.interrupt();
33+
}
34+
35+
36+
}

0 commit comments

Comments
 (0)