废话开篇
今天开始学习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 }