threadlocal和mdc
时间: 2023-09-21 15:04:20 浏览: 175
ThreadLocal是一种用于存储线程本地变量的机制。它可以让每个线程都拥有自己的变量副本,使得线程之间的变量互不干扰。MDC(Mapped Diagnostic Context)是基于ThreadLocal实现的一种日志跟踪机制。MDC可以在多线程环境下为每个线程记录不同的上下文信息,比如线程名称、请求ID等。
MDC的底层使用的是ThreadLocal来存储数据,但会做一些安全校验。而且MDC还支持子线程继承父线程的thread-local值,即InheritableThreadLocal。
在MDC的源码中,使用了static MDCAdapter mdcAdapter来实际承载数据。这是一个静态类,在整个JVM中只有一份。所以,当我们调用MDC.put时,实际上是将数据存储到mdcAdapter中。
总结来说,ThreadLocal是一种存储线程本地变量的机制,而MDC则是利用ThreadLocal实现的一种日志跟踪机制。MDC可以为每个线程记录不同的上下文信息,使得日志记录更加准确和可靠。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [ThreadLocal&MDC内存泄漏问题](https://blog.csdn.net/xiexiaojing/article/details/122150793)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [MDC、ThreadLocal、InheritableThreadLocal的区别和联系](https://blog.csdn.net/qq_33247435/article/details/127793733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文