主线程的uuid是用MDC类put进去的
MDC.put("uuid", "xxxxxxxxxxxxxxxxxxxxxxxxx");
子线程继承主线程的UUID
package com.jushisi.thread;
import java.util.Map;
import org.slf4j.MDC;
import com.alibaba.fastjson.JSON;
import com.jushisi.framework.utils.LogWriter;
public class MyRunnable implements Runnable {
private Runnable runnable;
private Map map;
public MyRunnable() {
}
/**
* 传入runnable类,并获取主线程中的所有参数(调用该构造器是父线程,所以这里的MDC.getXxxx获取到绑定在父线程的变量)
* @param runnable
*/
public MyRunnable(Runnable runnable) {
this.runnable = runnable;
this.map = MDC.getCopyOfContextMap();
}
@Override
public void run() {
// 可能是null,必须判断,追踪进代码可见null时会发生NPE
LogWriter.info("MDC MAP:"+JSON.toJSONString(map));
if (map != null) {
MDC.setContextMap(map);
}
try {
runnable.run();
} finally {
// 即使未执行setContextMap,这里可以clear不出错
MDC.clear();
}
}
}
1万+

被折叠的 条评论
为什么被折叠?



