tomcat开启socket的accept线程后,其实要做的主要工作是交给worker线程去完成的,这其中使用了线程池的技术。
如:
try {
SocketWrapper<Socket> wrapper = new SocketWrapper<Socket>(socket);
wrapper.setKeepAliveLeft(getMaxKeepAliveRequests());
getExecutor().execute(new SocketProcessor(wrapper));
}
事实上tomcat对ThreadPoolExecutor做了一点小小的封装。
先来看一个简单的java api——ThreadPoolExecutor的使用
package com.test.threadpool;
import java.util.concurrent.*;
public class ThreadpoolTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int minSpareThreads = 10;
int maxThreads = 200;
LinkedBlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor executor = new ThreadPoolExecutor(minSpareThreads, maxThreads, 60, TimeUnit.SECONDS,workQueue);
for (int i = 0; i <=5 ; i++) { //创建6个任务
executor.execute(createTask(i));
}
executor.shutdown();
}
private static Runnable createTask(final int taskID) {
return new Runnable() {
public void run() {
System.out.println("Task" + taskID + "开始");
System.out.println("Hello world");
System.out.println("Task" + taskID + "结束");
}
};
}
}
所要执行的任务,只要是Runnable,然后交给executor执行,显得很简单。
tomcat对其封装在package org.apache.tomcat.util.threads中,可以看看
本文介绍了Tomcat中如何使用线程池技术处理Socket连接请求。通过ThreadPoolExecutor管理线程,实现任务分配与执行,确保高并发场景下服务器稳定运行。
1036

被折叠的 条评论
为什么被折叠?



