我们正在寻找Java(在Spring框架上下文中)的库/功能以在线程之间传递引用:
//ParentThread:
XXX.putSharedObject("lock", childLock);
XXX.putSharedObject("someKey", someObjectInstance);
for(i=0;i<X;i++) { taskExecutor.execute(context.getBean("childClass")); }
childLock.wait(xxx);
//ChildThread:
YY = XXX.getSharedObject("someKey");
YY.someFunction();
...some work...
XXX.getSharedObject("lock").notify();
这样,线程(ParentThread)在XXX中设置的任何引用都只能由“ ParentThread”及其任何子级访问,而其他“ ParentThreads”或其子级则不能访问。
那可能吗? (我相信这种类型的映射诊断上下文如何在日志记录框架中工作)
谢谢
最佳答案
像这样解决(对M. le Rutte的称赞):
//ParentRunnable:
public static final InheritableThreadLocal<SomeObjectType> YY = new InheritableThreadLocal<SomeObjectType>();
@Override
public void run() {
...
YY.set(someObjectInstance);
logger.debug("InParent: {}", YY.get());
for(i=0;i<X;i++) { taskExecutor.execute(context.getBean("childClass")); }
}
//ChildRunnable:
@Override
public void run() {
logger.debug("InChild: {}", ParentRunnable.YY.get());
}
好的部分还在于:
@Override
protected SomeObjectType initialValue()
可以抛出异常以暗示在“ set()”之前过早地调用“ get()”,或者可以使用应用程序上下文来获取原型Bean,该原型Bean在子级之间用作单例。
希望这对需要它的人有所帮助(并希望也能正确书写)