繁体   English   中英

线程之间的Java共享引用

[英]Java shared references between threads

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

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

可以使用同步类甚至是块或方法以线程安全性实现Java共享引用。 这样,您可以在线程之间共享给定的对象(Parent,child ...)并保证线程安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM