Kra*_*ken 3 java concurrency multithreading tomcat threadpool
好了,我已经问了一个与此有关的问题,但是需要更多信息。我会尽量与我的问题保持一致。(因为我不确定这些概念)。
背景
我有一个Java Web项目(动态)。我正在编写Restful Web服务。以下是我班的摘录
/services
class Services{
static DataSource ds;
static{
ds = createNewDataSource;
}
/serviceFirst
@Consumes(Something)
@produces(Something)
public List<Data> doFirst(){
Connection con = ds.getConnection();
ResultSet res = con.execute(preparedStatement);
//iterate over res, and create list of Data.
return list;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在这里所说的非常基本的功能。
我已经在其中部署了tomcat服务器。我听说Tomcat的线程池大小为200(默认情况下)。现在我的问题是,线程池在这里到底是如何工作的。
假设我同时有两个请求。这意味着线程池中的两个线程将开始工作。这是否意味着两个线程都将具有我的类Services的实例?因为下面是我对线程和并发的理解。
public class myThread extends Thread(){
public void run(){
//do whatever you wan to do here;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,当我在Thread上调用start时,它将在run()方法中执行代码,并且在其中创建的所有对象都将属于该对象。
现在,回到Tomcat,在某处run()编写了一个实例化Services类的方法,这就是线程池处理200个并发请求的方式。(很明显,我要使它们并发执行需要200个内核,因此请忽略它)。
因为否则,如果tomcat没有200个具有相同执行路径的不同线程(即,我的Services类),那么它将如何精确地处理200个并发请求。
谢谢
Tomcat的线程池或多或少地起作用,就像您从线程池中得到的一样ExecutorService(请参阅参考资料Executors)。
YMMV。Tomcat侦听请求。收到请求后,它将请求放入队列。并行地,它维护X个线程,这些线程将连续尝试从此队列中获取。他们将准备ServletRequest和ServletResponse对象,以及FilterChain和Servlet进行调用。
用伪代码,这看起来像
public void run() {
while (true) {
socket = queue.take();
ServletRequest request = getRequest(socket.getInputStream());
ServletResponse response = generateResponse(socket.getOutputStream());
Servlet servletInstance = determineServletInstance(request);
FilterChain chain = determineFilterChainWithServlet(request, servletInstance);
chain.doFilter(request,response); // down the line invokes the servlet#service method
// do some cleanup, close streams, etc.
}
}
Run Code Online (Sandbox Code Playgroud)
确定适当的Servlet和Filter实例取决于在请求中,你已经配置了网址的映射的URL路径。Tomcat的(和每一个Servlet容器)将只管理的单个实例Servlet或Filter每个申报<servlet>或<filter>申报中的部署描述符。
这样,每个线程都可能service(..)在同一Servlet实例上执行该方法。
这就是Servlet规范和Servlet API以及Tomcat所保证的。
至于您的Restful Web服务,请阅读。它描述了资源通常如何成为应用程序范围内的单例,类似于ServletServlet容器管理的实例。也就是说,每个线程都使用相同的实例来处理请求。
| 归档时间: |
|
| 查看次数: |
1739 次 |
| 最近记录: |