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

页面导航:首页 > 软件编程 > Java编程 > java并发编程实战学习笔记之任务执行

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

来源: 作者: 时间:2016-01-18 15:52 【

第六章 任务执行6.1 在线程中执行任务串行-》多线程-》有限个多线程6.2 executor框架通过有界队列可以防止高负荷程序过度消耗内存java.lang.concurrent提供了线程池作为实现executor框架的一部
第六章 任务执行
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
 
Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<