gpt4 book ai didi

Java线程间共享引用

转载 作者:行者123 更新时间:2023-12-02 12:07:24 25 4
gpt4 key购买 nike

我们正在寻找 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”及其任何子级访问,而不能由其他“ParentThread”或其子级访问。

这可能吗? (我相信这就是映射诊断上下文在日志框架中的工作方式)

谢谢

最佳答案

像这样解决(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()”,或者使用应用程序上下文获取原型(prototype) bean,该原型(prototype) bean 用作子级之间的单例。

希望这对需要它的人有帮助(希望也写得正确)

关于Java线程间共享引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46795883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com