gpt4 book ai didi

java - spring boot应用和并发问题

转载 作者:搜寻专家 更新时间:2023-11-01 02:22:49 25 4
gpt4 key购买 nike

我正在开发一个应用程序,它将在 tomcat 的 spring boot 上下文中运行。该项目在启动时连接到 Kafka,提取消息并处理它们。 tomcat用于一些管理API。

Spring在加载时,通过多个线程与Kafka连接。每个线程都 Autowiring 了一个处理消息的 spring bean。这个 bean 当然 Autowiring 了更多的 bean 等等。

我需要考虑并发问题吗?同步东西?使用并发类型,例如 ConcurrentHashMap 而不是普通的 HashMap?

最佳答案

在spring中,bean默认是单例的。 bean的方法可以被多个线程同时调用。在每种方法中,您都不需要关心并发性。但是如果你想将数据保存在其他地方,比如其他数据对象的 bean 成员,你应该关心那些数据持有者的并发性。

在这个例子中:

@Service
public class SomeService {
public Map handle(Map dataHolder) {...}
}

@Service
public class OtherSerice {
@Inject SomeService serv1;
Map theDataNotSafe = new HashMap();

public Map func() {
Map theData = new HashMap();
serv1.handle(theData); // thread safe,
serv1.handle(theDataNotSafe); // not thread safe
}
}

OtherService.func() 函数将调用 SomeService.handle(..)。函数serv1.handle(theDataNotSafe); 不是线程安全的,因为有多个线程会调用同一个HashMap 的函数。

关于java - spring boot应用和并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34738060/

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