使用threadpoolExecutor,主要是任务的提交的执行和获取结果。

提交任务的方法有:

1、submit
2、execute
3、queue的add

其中1和2的使用必须是threadpoolExecutor的实例,直接提交。两种做法:1、暴露threadpool实例,2、封装threadpool,然后提供一个代理或decorator类似的东西进行任务提交。

联系到threadpoolexecutor内部使用的queue是blockingqueue:阻塞读取和插入,可以利用该queue作为管道,输送任务对象,而threadpool实例直接等待队列的数据。

BUT,问题在于threadpoolExecutor在实例化之后(new),池子是空的,并不会自动将线程数(taskRunner的数)初始化,怎么使其初始化呢(有了线程后,线程在timeout时间内等待任务,若需要其不用timeout呢,直接为0即可):可以在初始化之后先添加一个或多个空任务:

 queue = new CrawTaskBlockingQueue(capacity);
executors = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, queue);
//模拟开始
      for (int i = 0; i < corePoolSize; i++)
  executors.submit(new Callable<T>() {   public T call() {
  LogUtil.debug(logger, "executors test start...........");
   return null;
   }
  });

任务启动后,只需要向queue提交任务即可:

 queue.offer(task);

当然,这样做的问题比较大:

1、直接往threadpool提交任务时,如果threadpool 没有到达最大线程数,会直接创建线程执行任务,而不会进去queue;这种方式的统一入口却是queue:统一入queue,而且maxpoolSize>corepoolSize时,thread不会增加,是个弊端。

2、Threadpool有RejectedExecution的机制,在无法往queue中offer的时候,会调用一个拒绝机制。而直接调用add方法,一般的queue实现中,会尝试一下offer,没有拒绝以后的机制。但是如果没有特殊reject的指定,这一条不使用也没什么。直接queue的插入阻塞即可满足。

threadpoolExecutor----自动执行任务的更多相关文章

  1. WPF:自动执行"机器人"程序若干注意事项

    企业应用中,经常会遇到一些需要定时自动执行的程序来完成某些功能,比如:自动定时从第三方web service取回数据.定时对历史数据进行清理.定时向ftp上传业务数据... 这类程序,我习惯称为“机器 ...

  2. 使用php作linux自动执行脚本

    使用php作linux自动执行脚本 [来源] 达内    [编辑] 达内   [时间]2013-03-21 在作社区时, 时常需要统计上线人数等数据. 一般做法是, 把这段代码放在用户 login或者 ...

  3. (转)在网页中JS函数自动执行常用三种方法

    原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中 ...

  4. jQuery在HTML文档加载完毕后自动执行某个事件;

    原来onchange=“fucntionname(parms)”: <select name="country" id="selCountries_{$sn}&qu ...

  5. linux系统自动执行任务(转)

    开机启动 开机启动应该是我们很经常的需求了,我们常需要在开机时就自动执行某些命令来开启服务,进程等,有了它我们不必再在每次开机时输入同一堆命令. chkconfig命令 使用chkconfig命令可以 ...

  6. JS函数自动执行

    关于让网页中的JavaScript函数自动执行,方法就多洛,但是万变不离其宗,下面给大家介绍一下! 前提条件,网页中必须有JS函数代码,或者,使用文件导入的方法也行: 在HTML中的Head区域中,有 ...

  7. Oracle自动执行任务(存储过程)

    Oracle自动执行任务(存储过程) SQL> variable job number;SQL> begin2 dbms_job.submit(:job,'存储过程名;',sysdate, ...

  8. 使用自定义脚本扩展程序自动执行 VM 自定义任务

     在 Build 开发者大会上推出VM 扩展程序的其中一个称为"自定义脚本扩展程序",它支持 PowerShell.如果这是您第一次访问这些博客,可能需要查看以前的博客,请单击 ...

  9. 转 Windows 7设置定时自动执行任务方法

    在使用电脑的时候可能会遇到一些需要无人值守让电脑自行执行任务后定时关机的情形,在Win7系统中,我们可以使用"任务计划"设置功能结合 shutdown命令灵活设置任务计划,让Win ...

  10. 每隔一秒自动执行函数(JavaScript)

    http://www.cnblogs.com/xlx0210/archive/2010/03/19/1689497.html 1. setInterval() ——每隔一秒自动执行方法,setInte ...

随机推荐

  1. struts2学习(2)struts2核心知识

    一.Struts2 get/set 自动获取/设置数据 根据上一章.中的源码继续. HelloWorldAction.java中private String name,自动获取/设置name: pac ...

  2. 32位汇编基础_cpu 寄存器

    32位通用寄存器 EAX EBX ECX EDX EBP ESP ESI EDI 八个寄存器都可以作为普通的数据寄存器使用.但有的有特殊的用途: EAX    为累加器, ECX    为计数器, E ...

  3. HDU 3641 Pseudoprime numbers(快速幂)

    Pseudoprime numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11336   Accepted: 4 ...

  4. 用shp制作geoJson格式地图数据(shp convert to geoJson)

    本文紧接前文,简单说明利用shp数据制作Echarts支持的geoJson格式的地图数据.本文以北京市通州区各镇的shp数据为例进行说明. 软件环境: ArcGIS 10.2 (ArcGIS 10.2 ...

  5. 二.jQuery源码解析之构建jQuery之构建函数jQuery的7种用法

    一:$(selectorStr[,限制范围]),接受一个选择器(符合jQuery规范的字符串),返回一个jQuery对象; 二:$(htmlStr[,文档对象]),$(html[,json对象])传入 ...

  6. 使用protocol buffer时关闭警告

    在生成的文件头尾添加屏蔽警告的代码. 头部: #pragma warning(push, 2) // --------------------------------------------- 尾部: ...

  7. 网页中显示pdf的方法

    非常好的在网页中显示pdf的方法 今天有一需求,要在网页中显示pdf,于是立马开始搜索解决方案,无意中发现一个非常好的解决方法,详见http://blogs.adobe.com/pdfdevjunki ...

  8. 网络通信和TCP详解

    交换机.路由器.服务器组网 1. 通信过程(pc+switch+router+server) 较为复杂的通信过程如:访问 www.baidu.com 注意:一定要配置 PC:IP.NETMASK.DF ...

  9. Windows安装MySQL教程

    一.下载MySQL MySQL官网首页 --> Download --> Community --> 选择“ MySQL Community Server” 即:MySQL下载连接 ...

  10. Thrift分析

    [Thrift分析] Thrift定义一套IDL(Interface Definition Language)用于描述接口,通常后缀名为.thrift,通过thrift程序把.thrift文件导出成各 ...