无意间看到了TaskDecorator这个类,就学习了一下。现记录一下学习内容。
TaskDecorator是用于线程间传递数据。从主线程拷贝数据到子线程。具体数据实际上是封装到threadlocal里面的。
引用一下拷贝MDC的例子:
这里使用了slf4j-api的jar包里面的一个MDC的类。通过查看源码发现,该类实际上是封装了threadlocal。子线程runnable执行前,通过静态方法getCopyOfContextMap获取主线程里面的数据,
在子线程里面,通过setContextMap方法设置到子线程的threadlocal里面。这样子线程就获取到主线程的数据了。注意:finally块里面,clear一下,释放掉,子线程里面的数据。
参考:
https://moelholm.com/blog/2017/07/24/spring-43-using-a-taskdecorator-to-copy-mdc-data-to-async-threads
http://www.slf4j.org/api/org/slf4j/MDC.html
https://cloud.tencent.com/developer/article/1340313