在Java类库中,任务执行的主要抽象不是Thread,而是Executor。
Executor源代码如下:
public interface Executor {
void execute(Runnable command);
}
它提供了一种标准的方法将任务的提交过程与执行过程解耦开来,并用Runnable来表示任务。Executor的实现还提供了对生命周期的支持以及统计信息收集、应用程序管理机制和性能监视等机制。
Executor基于生产者-消费者模式,提交任务的操作相当于生产者(生成待完成的工作单元),执行任务的线程相当于消费者(执行完这些工作单元)。
1.基于Executor的Web服务器
基于线程池的Web服务器代码如下:
public class TaskExecutionWebServer {
private static final int NTHREADS = 100;
private static final Executor exec = Executors.newFixedThreadPool(NTHREADS);
public static void main(String[] args) throws IOException{
ServerSocket socket = new ServerSocket(80);
while(true){
final Socket connection = socket.accept(