【发布时间】:2014-11-16 04:27:15
【问题描述】:
好的,我已经问过一个关于此的问题,但需要更多信息。我会尽量与我的问题保持一致。 (因为我不确定这些概念)。
背景
我有一个 java web 项目(动态)。我正在编写 Restful 网络服务。下面是我班上的一个sn-p
/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;
}
}
这是我在此说明的一个非常基本的功能。
我已经部署了这个 tomcat 服务器。我听说 Tomcat 有一个线程池,大小为 200(默认情况下)。现在我的问题是,线程池在这里究竟是如何工作的。
假设我有两个请求同时进入。这意味着线程池中的 2 个线程将开始工作。这是否意味着两个线程都将具有我的类服务的实例?因为下面是我对线程和并发的理解。
public class myThread extends Thread(){
public void run(){
//do whatever you wan to do here;
}
}
在上面,当我在我的线程上调用 start 时,它将执行 run() 方法中的代码,并且它在那里创建的所有对象都属于它。
现在,回到 Tomcat,是否在某处编写了 run() 方法来实例化 Services 类,这就是线程池处理 200 个并发请求的方式。 (显然,我知道它们需要 200 个内核才能同时执行,所以请忽略它)。
因为否则,如果tomcat没有200个不同的线程具有相同的执行路径(即我的Services类),那么它将如何处理这200个并发请求。
谢谢
【问题讨论】:
标签: java multithreading tomcat concurrency threadpool