2016-11-04 134 views

回答

2

如果将系统属性isThreadContextMapInheritable设置为true,则每个子线程都将继承父类ThreadContext状态。但是这对于Executors不起作用,因此您需要手动将数据从一个线程复制到另一个线程。

更新#2

你可以做这样的事情:

public abstract class ThreadContextRunnable implements Runnable { 

    private final Map context = ThreadContext.getContext(); 

    @Override 
    public final void run() { 
    if (context != null) { 
     ThreadContext.putAll(context); 
    } 
    try { 
     runWithContext(); 
    } finally { 
     ThreadContext.clearAll(); 
    } 
    } 

    protected abstract void runWithContext(); 
} 

然后你只需要实现runWithContext方法。

+0

对于执行程序,我可以在它们为所有执行程序子进程调用的类的run()中设置ThreadContext吗? – Medelwr

相关问题