Ido*_*ash 5 java concurrency spring spring-boot
我正在开发一个将在带有tomcat的spring boot上下文中运行的应用程序。该项目在启动时连接到Kafka,提取消息并进行处理。tomcat用于某些管理API。
当Spring加载时,它通过多个线程与Kafka连接。每个线程都与处理消息的Spring 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
}
}
Run Code Online (Sandbox Code Playgroud)
OtherService.func() 函数将调用SomeService.handle(..). 函数serv1.handle(theDataNotSafe); 不是线程安全的,因为有多个线程会调用相同的函数HashMap。
| 归档时间: |
|
| 查看次数: |
5041 次 |
| 最近记录: |