我一直在研究spring框架控制器/服务/存储库注释,每个类都是一个单例。 每当请求到达服务器时,服务器必须为相应的控制器类生成一个新线程(是一个单例),这样每个线程都有自己的堆栈来在不同的堆栈中执行相同的类方法。
当我看到控制器类时,它既没有实现Runnable类也没有扩展线程。
我想知道这背后的代码。服务器如何为单例控制器类生成线程。
是通过反射或匿名线程或任何其他方法完成的。请发布示例代码。
答案 0 :(得分:2)
服务器不需要为每个新请求生成一个新线程,它太浪费而且不可扩展。它通常有一个固定的线程池,可以等待新的请求。每当这样的请求到达时,服务器只是将其处理委托给其中一个空闲线程。处理的一部分是在您的(已存在的,单例)对象上调用方法。
因此,*
或Controller
不需要Service
。其中一个工作线程只是唤醒,在类上调用一个方法(它的堆栈在调用期间暂时增长)并返回可用线程池以等待下一个请求(这次,堆栈重置回状态闲着等待。