java的服务是每收到一个请求就新开一个线程来处理吗
1个回答
展开全部
理论上是这样的,只不过为了性能考虑线程事先创建好了并且闲置的线程可以重用而已。但一般 J2EE 服务器会有线程池,并不是每个请求新开一个。
高频率地创建线程会导致操作系统那边开销比较大,因此一般都是使用线程池,也就是说已经创建好的线程一般不会那么快地还给操作系统去销毁,免得下次又花费时间去创建。
实践中,我们的代码应该是无状态的 (Stateless),是说 Servlet 或 EJB Session Bean 的状态(成员变量),也就是说,不要做了留下什么东西给下次使用,也不要在使用时依赖上次留下来的什么成员变量之类的东西。WEB 线程池和 EJB 线程池都是这么设计的。现在有状态的 Stateful EJB 已经没有什么实践用途了,新的 Servlet 版本中已经删除了 SingleThreadMode 这个接口,表示这不应该被支持,应用程序开发者应该只使用 Stateless 方式。
高频率地创建线程会导致操作系统那边开销比较大,因此一般都是使用线程池,也就是说已经创建好的线程一般不会那么快地还给操作系统去销毁,免得下次又花费时间去创建。
实践中,我们的代码应该是无状态的 (Stateless),是说 Servlet 或 EJB Session Bean 的状态(成员变量),也就是说,不要做了留下什么东西给下次使用,也不要在使用时依赖上次留下来的什么成员变量之类的东西。WEB 线程池和 EJB 线程池都是这么设计的。现在有状态的 Stateful EJB 已经没有什么实践用途了,新的 Servlet 版本中已经删除了 SingleThreadMode 这个接口,表示这不应该被支持,应用程序开发者应该只使用 Stateless 方式。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询