废话开篇

今天开始学习Java并发编程实战,很多大牛都推荐,所以为了能在并发编程的道路上留下点书本上的知识,所以也就有了这篇博文。今天主要学习的是任务执行章节,主要讲了任务执行定义、Executor、线程池和Executor生命周期等内容,大部分是概念性的,请选择阅读。

切入正题

线程中执行任务

线程执行任务的两种策略:一是把所有的任务放在单个线程中串行执行,二是将每个任务放在各自的线程中执行。策略一的问题在于其糟糕的响应性和吞吐量;策略二的问题在于资源管理的复杂性。

Executor框架

Executor简化了线程的管理工作,并且java.util.concurrent提供了一种灵活的线程池作为Executor框架的一部分。Executor基于生产者—消费者设计模式,提交任务的操作单元相当于生产者(生成待完成的工作单元),执行任务的线程相当于消费者(执行完这些工作单元)。

示例代码:TaskExecutionWebServer

 1 /**  
 2  * @Title: TaskExecutionWebServer.java
 3  * @Package never.chapter06
 4  * @author "Never" xzllc2010#gmail.com  
 5  * @date Mar 15, 2014 9:16:26 AM
 6  * @Description: TODO
 7  */
 8 package never.chapter06;
 9 
10 import java.io.IOException;
11 import java.net.ServerSocket;
12 import java.net.Socket;
13 import java.util.concurrent.Executor;
14 import java.util.concurrent.Executors;
15 
16 public class TaskExecutionWebServer {
17     private static final int NTHREADS = 100;
18     private static final Executor exec = Executors.newFixedThreadPool(NTHREADS);
19 
20     public static void main(String[] args) throws IOException {
21         ServerSocket serverSocket = new ServerSocket(80);
22         while (true) {
23             final Socket connection = serverSocket.accept();
24             Runnable task = new Runnable() {
25                 public void run() {
26                     // handleRequest(connection);
27                 }
28             };
29             exec.execute(task);
30         }
31     }
32 }
View Code

相关文章: