java并发编程实战学习笔记之任务执行
2015-12-07 21:53
393 查看
第六章 任务执行
6.1 在线程中执行任务
串行-》多线程-》有限个多线程
6.2 executor框架
通过有界队列可以防止高负荷程序过度消耗内存
java.lang.concurrent提供了线程池作为实现executor框架的一部分
executor接口:提供生产者-消费者模式
基于executor的web服务器:
线程池:与task queue密切相关,在工作队列中保存了所有待执行的任务,工作线程提前建立,然后从工作队列中取出任务执行,执行完毕重新等待下一个任务,工作线程可以重用。
通过调用executors中的静态方法来创建线程池:newFixedThreadPool newCachedThreadPool newSingleThreadPool newScheduledThreadPool
executor的生命周期:通过executor的子接口executorServer来实现生命周期管理
延迟任务与周期任务:Timer 或者用scheduledThreadPoolExecutor来替代
6.3 找出可利用的并行性
携带结果的任务callable 和future
callable:它认为主入口点(call)将返回一个值或者抛出一个异常
future:表示一个任务的生命周期,并提供了相应的方法来判定是否已经完成或者被取消
executorServer中的所有submit方法将一个runnable或者callable提交给executor,从而返回一个future来获得任务的执行结果或者取消任务。还可以显式的为runnable或者callable实例化一个futureTask
completionServer:将executor和blockQueue结合起来,
为任务设置时限
invokeall
6.1 在线程中执行任务
串行-》多线程-》有限个多线程
6.2 executor框架
通过有界队列可以防止高负荷程序过度消耗内存
java.lang.concurrent提供了线程池作为实现executor框架的一部分
executor接口:提供生产者-消费者模式
基于executor的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(); Runnable task = new Runnable() { public void run() { handleRequest(connection); } }; exec.execute(task); } } private static void handleRequest(Socket connection) { // request-handling logic here } }通过继承executor接口,就可以实现不同的服务器处理方式
线程池:与task queue密切相关,在工作队列中保存了所有待执行的任务,工作线程提前建立,然后从工作队列中取出任务执行,执行完毕重新等待下一个任务,工作线程可以重用。
通过调用executors中的静态方法来创建线程池:newFixedThreadPool newCachedThreadPool newSingleThreadPool newScheduledThreadPool
executor的生命周期:通过executor的子接口executorServer来实现生命周期管理
延迟任务与周期任务:Timer 或者用scheduledThreadPoolExecutor来替代
6.3 找出可利用的并行性
携带结果的任务callable 和future
callable:它认为主入口点(call)将返回一个值或者抛出一个异常
future:表示一个任务的生命周期,并提供了相应的方法来判定是否已经完成或者被取消
executorServer中的所有submit方法将一个runnable或者callable提交给executor,从而返回一个future来获得任务的执行结果或者取消任务。还可以显式的为runnable或者callable实例化一个futureTask
completionServer:将executor和blockQueue结合起来,
为任务设置时限
invokeall
相关文章推荐
- java-模拟tomcat服务器
- Linux socket 初步
- java socket 注意的地方
- java socket 注意的地方
- Ruby 之 class 中的 private、 protected、public
- Ruby定义私有方法(private)的两种办法
- C#基于socket模拟http请求的方法
- 简单的Ruby中的Socket编程教程
- Socket不能选择本地IP连接问题如何解决
- C#之Socket操作类实例解析
- 使用C#来编写一个异步的Socket服务器
- C#使用Socket快速判断数据库连接是否正常的方法
- 科学知识:理解socket
- php与flash as3 socket通信传送文件实现代码
- php类中private属性继承问题分析
- 解决time_wait强制关闭socket
- C#使用Socket上传并保存图片的方法
- Lua编程示例(八):生产者-消费者问题
- Ruby中的public、private、protected区别小结