异步执行框架executor是一个接口,只有一个方法。接受一个Runnable做为参数,执行任务。 将任务的执行与提交解耦。

1:executor

package java.util.concurrent;

public interface Executor {
void execute(Runnable var1);
}

2:使用executor 创建一个任务,并执行。

package chaptor06;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors; 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 serverSocket = new ServerSocket(100); while (true) {
final Socket connection=serverSocket.accept();
Runnable task=new Runnable() { //Runnable 不处理异常,callable 处理异常。
@Override
public void run() {
//handlerRequest (connection);
}
}; exec.execute(task); //将Runnable 交给executor
}
}
}

3:因为executor不能对线程进行进行操作,例如终止等。所以executorService继承了 executor。executorService 可以接收callable对象,callable能够处理异常。

能够返回含有将来结果的 future等。能够使该框架执行的线程终止。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
// package java.util.concurrent; import java.util.Collection;
import java.util.List; public interface ExecutorService extends Executor {
void shutdown(); List<Runnable> shutdownNow(); boolean isShutdown(); boolean isTerminated(); boolean awaitTermination(long var1, TimeUnit var3) throws InterruptedException; <T> Future<T> submit(Callable<T> var1); <T> Future<T> submit(Runnable var1, T var2); Future<?> submit(Runnable var1); <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> var1) throws InterruptedException; <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> var1, long var2, TimeUnit var4) throws InterruptedException; <T> T invokeAny(Collection<? extends Callable<T>> var1) throws InterruptedException, ExecutionException; <T> T invokeAny(Collection<? extends Callable<T>> var1, long var2, TimeUnit var4) throws InterruptedException, ExecutionException, TimeoutException;
}

4:completionService将executor和blockingqueue的功能融合在一起,可以将(一组)callable任务交给它,然后用take和poll方法获得结果future。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
// package java.util.concurrent; public interface CompletionService<V> {
Future<V> submit(Callable<V> var1); Future<V> submit(Runnable var1, V var2); //提交任务 Future<V> take() throws InterruptedException; //获得结果 Future<V> poll(); Future<V> poll(long var1, TimeUnit var3) throws InterruptedException;
}

5:为任务设置时限,

当某个任务获得的结果超过一定时间时,就舍弃它,可以通过future.get方法实现。传递给一个时间限制。

    V get(long var1, TimeUnit var3) throws InterruptedException, ExecutionException, TimeoutException;

6:当一组任务提交,访问不同网站的数据库等,可以设置一个时限,当到达时限时,只要取到的结果,如果某些任务没有取到结果,那么将它们舍弃。可以用executorService中的invokeall方法。

<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> var1, long var2, TimeUnit var4) throws InterruptedException;
ExecutorService 构建多线程生产者消费者

https://github.com/1367356/GradleTestUseSubModule/tree/master/javaConcurrency/src/main/java/MessageQueue/one

第六章并发编程,异步执行框架executor的更多相关文章

  1. 那些年读过的书《Java并发编程实战》和《Java并发编程的艺术》三、任务执行框架—Executor框架小结

    <Java并发编程实战>和<Java并发编程的艺术>           Executor框架小结 1.在线程中如何执行任务 (1)任务执行目标: 在正常负载情况下,服务器应用 ...

  2. [CSAPP笔记][第十二章并发编程]

    第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟 ...

  3. CSAPP:第十二章 并发编程

    CSAPP:第十二章 并发编程 12.1 线程执行模型12.2 多线程之间并发通信12.3 其他并发问题   使用应用级并发的应用程序称为并发程序.现代操作系统提供三种基本的构造并发程序的方法: 进程 ...

  4. C++笔记-并发编程 异步任务(async)

    转自 https://www.cnblogs.com/diysoul/p/5937075.html 参考:https://zh.cppreference.com/w/cpp/thread/lock_g ...

  5. C++并发编程 异步任务

    C++并发编程 异步任务 异步任务 std::async (1) std::async 会返回一个 std::future 对象, 这个对象持有最终计算出来的结果. 当需要这个值时, 只需要调用对象的 ...

  6. 并发编程学习笔记(15)----Executor框架的使用

    Executor执行已提交的 Runnable 任务的对象.此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节.调度等)分离开来的方法.通常使用 Executor 而不是显式地创建 ...

  7. Java 并发编程 -- Fork/Join 框架

    概述 Fork/Join 框架是 Java7 提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架.下图是网上流传的 Fork Join 的 ...

  8. java并发编程(十七)Executor框架和线程池

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17465497   Executor框架简介 在Java 5之后,并发编程引入了一堆新的启动 ...

  9. 《C#并发编程经典实例》学习笔记-第一章并发编程概述

    并发编程的术语 并发 同时做多件事情 多线程 并发的一种形式,它采用多个线程来执行程序. 多线程是并发的一种形式,但不是唯一的形式. 并行处理 把正在执行的大量的任务分割成小块,分配给多个同时运行的线 ...

随机推荐

  1. EF--CodeFirst

    1,增加EntityFramework的引用 2,创建实体类 public class Invoice { public Invoice() { LineItems = new List<Lin ...

  2. HTML5开发之 -- 模态突出窗(bootstrap)

    最近在学习web端开发相关,bootstrap非常好用! 有个模态弹出窗的效果,在此记录下: 1.导入: <script src="libs/js/jquery-3.2.1.min.j ...

  3. python中模块,包,库

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

  4. 使用keytool生成密钥对

    1.首先要用KeyTool工具来生成私匙库:(-alias别名 –validity 3650表示10年有效) keytool -genkey -alias privatekey -keystore p ...

  5. C++11新特性之八——函数对象function

    详细请看<C++ Primer plus>(第六版中文版) http://www.cnblogs.com/lvpengms/archive/2011/02/21/1960078.html ...

  6. Android 使用CheckBox实现多选效果

    CheckBox:复选框1.有两种状态: 选中状态(true),未选中状态(false)2.属性: android:id="@+id/checkbox" android:layou ...

  7. Mybatis中insert

    <insert id="insert" parameterType="Currency"> INSERT INTO YZ_SECURITIES_CU ...

  8. 《转载》POI导出excel日期格式

    参考帖子: [1]http://www.ithao123.cn/content-2028409.html [2]http://javacrazyer.iteye.com/blog/894850 再读本 ...

  9. HTML - 分页效果布局

    <p class="jcFY"> 显示 <select name="" id=""> <option valu ...

  10. jQuery的无new构建

    正常面向对象的写法: var cJquery = function(){ //构造函数体 }; cJquery.prototype = { name : function(alert("ch ...