public interface ThreadContext {
/**
* 添加属性
*
* @param key
* @param object
*/
void add(String key, Object object);
/**
* 获得属性
*
* @param key
* @return
*/
Object get(String key);
}
public class TaskThreadContext implements ThreadContext {
/** 订单id */
private int orderId;
/** 任务开始执行时间 */
private long startTime;
/** task context map */
public static Map<String, Object> taskContextMap = new HashMap<>();
/**
* 添加
*
* @param key
* @param object
*/
@Override
public void add(String key, Object object) {
if (null == taskContextMap) {
taskContextMap = new HashMap<String, Object>();
}
taskContextMap.put(key, object);
}
@Override
public Object get(String key) {
if (null == taskContextMap) {
taskContextMap = new HashMap<String, Object>();
}
return taskContextMap.get(key);
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public long getStartTime() {
return startTime;
}
public void setStartTime(long startTime) {
this.startTime = startTime;
}
}
public class TaskContextHolder {
/** task context threadLocal */
private static final ThreadLocal<ThreadContext> TASK_CONTEXT = new ThreadLocal<>();
public static ThreadContext getTaskContext() {
if (TASK_CONTEXT.get() == null) {
TASK_CONTEXT.set(new TaskThreadContext());
}
return TASK_CONTEXT.get();
}
public static void setTaskContext(ThreadContext taskContext) {
TASK_CONTEXT.set(taskContext);
}
public static void add(String key, Object param) {
getTaskContext().add(key, param);
}
public static Object get(String key) {
return getTaskContext().get(key);
}
}
public class Test {
public static void main(String[] args) {
// 创建线程t1
Thread thread = new Thread(() -> {
// 添加上下文
TaskThreadContext context = new TaskThreadContext();
context.setOrderId(1);
TaskContextHolder.setTaskContext(context);
// 添加普通属性
TaskContextHolder.add("t1", "Hello t1");
TaskThreadContext taskContext = (TaskThreadContext) TaskContextHolder.getTaskContext();
System.out.println("t1 order id:" + taskContext.getOrderId());
System.out.println("t1:" + TaskContextHolder.get("t1"));
}, "t1");
thread.start();
// 创建线程t2
Thread thread2 = new Thread(() -> {
// 添加上下文
TaskThreadContext context = new TaskThreadContext();
context.setOrderId(2);
TaskContextHolder.setTaskContext(context);
// 添加普通属性
TaskContextHolder.add("t2", "Hello t2");
TaskThreadContext taskContext = (TaskThreadContext) TaskContextHolder.getTaskContext();
System.out.println("t2 order id:" + taskContext.getOrderId());
System.out.println("t2:" + TaskContextHolder.get("t2"));
}, "t2");
thread2.start();
}
}
结果:
t1 order id:1
t1:Hello t1
t2 order id:2
t2:Hello t2
原文:https://www.cnblogs.com/yeyangshu/p/14161327.html