// designed as a single embodiment public Final class the ActionContext { // constructor privatization Private the ActionContext () { } // Holder类 private static class ContextHolder { private final static ActionContext actionContext = new ActionContext(); } // provided to the outside using public static the ActionContext getActionContext () { return ContextHolder.actionContext; } // 属性 public Context getContext() { return threadLocal.get(); } // 属性 private final ThreadLocal<Context> threadLocal = new ThreadLocal<Context>() { @Override protected Context initialValue() { return new Context(); } }; } public class Context { private String name; private String cardId; public String getCardId() { return cardId; } public void setCardId (String cardId) { this .cardId = cardId; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } } public class ExecutionTask implements Runnable { private QueryFromDBAction queryAction = new QueryFromDBAction(); private QueryFromHttpAction httpAction = new QueryFromHttpAction(); @Override public void run() { queryAction.execute(); System.out.println("The name query successful"); httpAction.execute(); System.out.println("The cardId query successful"); Context context = ActionContext.getActionContext().getContext(); System.out.println("The Name is " + context.getName() + " and CardId is " + context.getCardId()); } } public class QueryFromDBAction { public void execute() { try { Thread.sleep(1000L); String name = Thread.currentThread().getName() +"中的Jack"; ActionContext.getActionContext().getContext().setName(name); } catch (InterruptedException e) { e.printStackTrace (); } } } public class QueryFromHttpAction { public void execute() { Context context = ActionContext.getActionContext().getContext(); String name = context.getName(); String cardId = getCardId(name); context.setCardId (cardId); } private String getCardId(String name) { try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace (); } return Thread.currentThread().getName()+"中的cardId"; } } public class ContextTest { public static void main(String[] args) { Intshtreamkrngeclosed ( 1 , 4 ) .forEach(i -> new Thread(new ExecutionTask(),"【线程"+i+"】").start() ); } }