您的位置:首页 > 编程语言 > Java开发

java并发编程实战学习笔记之任务执行

2015-12-07 21:53 393 查看
第六章 任务执行

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息