儘管可以以細粒度的方式傳播(如executor.execute(Context.current().wrap(runnable))
),但您應該嘗試將Context
傳播集成到跨線程工作傳輸中。對於許多應用中,會盡快,因爲它是建立像wrapping the "main" executor簡單:
executor = Context.currentContextExecutor(executor);
// executor now auto-propagates
在你的應用程序的開始做這一次,然後你大多停止擔心傳播。
但是應用程序會有所不同。例如,創建應用程序Thread
小號直接或許應該做一個ThreadFactory
中傳播調用線程的Context
到Thread
:
class PropagatingThreadFactory implements ThreadFactory {
private final ThreadFactory delegate;
public PropagatingThreadFactory(ThreadFactory d) {delegate = d;}
@Override public Thread newThread(Runnable r) {
return delegate.newThread(Context.current().wrap(r));
}
}