Skip to content

Commit df113b8

Browse files
committed
[docs fix]图片地址修正
1 parent 9276ac2 commit df113b8

File tree

2 files changed

+4
-6
lines changed

2 files changed

+4
-6
lines changed

docs/high-performance/message-queue/message-queue.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ Kafka 是一个分布式系统,由通过高性能 TCP 网络协议进行通信
206206

207207
不过,要提示一下:**如果要使用 KRaft 模式的话,建议选择较高版本的 Kafka,因为这个功能还在持续完善优化中。Kafka 3.3.1 版本是第一个将 KRaft(Kafka Raft)共识协议标记为生产就绪的版本。**
208208

209-
![](https://oss.javaguide.cn/github/javaguide/high-performance/message-queue/kafka3.3.1-kraft-%20production-ready.png)
209+
![](https://oss.javaguide.cn/github/javaguide/high-performance/message-queue/kafka3.3.1-kraft-production-ready.png)
210210

211211
Kafka 官网:<http://kafka.apache.org/>
212212

docs/java/concurrent/java-concurrent-questions-03.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ static class Entry extends WeakReference<ThreadLocal<?>> {
141141
1. 在使用完 `ThreadLocal` 后,务必调用 `remove()` 方法。 这是最安全和最推荐的做法。 `remove()` 方法会从 `ThreadLocalMap` 中显式地移除对应的 entry,彻底解决内存泄漏的风险。 即使将 `ThreadLocal` 定义为 `static final`,也强烈建议在每次使用后调用 `remove()`
142142
2. 在线程池等线程复用的场景下,使用 `try-finally` 块可以确保即使发生异常,`remove()` 方法也一定会被执行。
143143

144-
### 如何跨线程传递 ThreadLocal 的值?
144+
### ⭐️如何跨线程传递 ThreadLocal 的值?
145145

146146
由于 `ThreadLocal` 的变量值存放在 `Thread` 里,而父子线程属于不同的 `Thread` 的。因此在异步场景下,父子线程的 `ThreadLocal` 值无法进行传递。
147147

@@ -150,7 +150,7 @@ static class Entry extends WeakReference<ThreadLocal<?>> {
150150
- `InheritableThreadLocal``InheritableThreadLocal` 是 JDK1.2 提供的工具,继承自 `ThreadLocal` 。使用 `InheritableThreadLocal` 时,会在创建子线程时,令子线程继承父线程中的 `ThreadLocal` 值,但是无法支持线程池场景下的 `ThreadLocal` 值传递。
151151
- `TransmittableThreadLocal``TransmittableThreadLocal` (简称 TTL) 是阿里巴巴开源的工具类,继承并加强了`InheritableThreadLocal`类,可以在线程池的场景下支持 `ThreadLocal` 值传递。项目地址:<https://github.com/alibaba/transmittable-thread-local>
152152

153-
#### `InheritableThreadLocal` 原理扩展
153+
#### InheritableThreadLocal 原理
154154

155155
`InheritableThreadLocal` 实现了创建异步线程时,继承父线程 `ThreadLocal` 值的功能。该类是 JDK 团队提供的,通过改造 JDK 源码包中的 `Thread` 类来实现创建线程时,`ThreadLocal` 值的传递。
156156

@@ -181,7 +181,7 @@ private void init(/* ... */) {
181181
}
182182
```
183183

184-
#### `TransmittableThreadLocal` 原理扩展
184+
#### TransmittableThreadLocal 原理
185185

186186
JDK 默认没有支持线程池场景下 `ThreadLocal` 值传递的功能,因此阿里巴巴开源了一套工具 `TransmittableThreadLocal` 来实现该功能。
187187

@@ -370,8 +370,6 @@ public void allowCoreThreadTimeOut(boolean value) {
370370

371371
当队列中有可用任务时,会唤醒被阻塞的线程,线程的状态会由 `WAITING` 状态变为 `RUNNABLE` 状态,之后去执行对应任务。
372372

373-
#### 相关源码
374-
375373
接下来通过相关源码,了解一下线程池内部是如何做的。
376374

377375
线程在线程池内部被抽象为了 `Worker` ,当 `Worker` 被启动之后,会不断去任务队列中获取任务。

0 commit comments

Comments
 (0)