Spring应用程序是否是多线程的



我需要创建几个服务,在这些服务中,无休止的循环将旋转,并有可能停止它们。它似乎要求在单独的线程中实现所有内容。我试图通过编写一个小型测试应用程序在Spring应用程序中创建它们。在这个应用程序中使用Spring是因为您必须将web接口连接到它。使用了内置的Apache Tomcat web服务器。

@Service
public class FirstService
public isStart = false;
private action() {
while (isStart) {
... 
} 
}
}
@Service
public class NextService
public isStart = false;
private action() {
while (isStart) {
... 
} 
}
}

通过控制器启动和停止服务

@RestController
public class MyController {
FirstService firstService;

@PostMapping
public ResponseEntity<?> post(@PathVariable(PARAM_ACTION) Integer action) {
firstService.isStart = ...;
...
}
...
}

似乎一切都正常,即应用程序是多线程的?否则,一切都将停止,直到执行第一个操作方法问题:如果一切都已经工作,我应该创建一个多线程应用程序吗?或者这不是一个很好的解决方案,仍然需要使用带线程的标准解决方案来实现?或者Spring也有另一个现成的解决方案来解决这种情况?

我想用Spring现成的东西来解决这个问题。但我不知道它的哪些组件可以帮助我做到这一点。主要要求是速度,循环时间不应超过20ms,即不应是非常重的部件。在周期的每次迭代中,EHT接收300到800字节的数据,进行处理并发送到另一个地址。同时可以提供三到五种这样的服务。如果Spring有能够处理这样一项任务的组件,那么如果你告诉我它们的名称,我会很高兴,我已经在研究它们了。换句话说,我需要关于挖掘方向的建议,使用Spring中的一些组件,或者开始研究多线程应用程序并创建自己的组件。

根据您使用的是spring-web还是spring-webflux,默认的web服务器分别是Tomcat或Netty。两者都是多线程的。事实上,我不知道市场上有什么网络服务器不是这样的。如果要微调线程池,请参阅https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html.

您的服务类是普通类,不同步。spring中的任何类都有一个作用域,默认情况下它们都是singleton。在webspring中,只有一个线程负责执行所有请求,但在webflux中,由于没有阻塞性质,每个空闲线程都用于处理请求。但如果你想写并发应用程序,你必须使用多线程机制,如同步或锁定解决方案

最新更新