我们正在寻找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在子级之间用作单例。

希望这对需要它的人有所帮助(并希望也能正确书写)

10-08 08:58