使用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. [转]Web 调试工具之 Advanced REST client

    原文:http://bbs.itcast.cn/forum.php?mod=viewthread&tid=85654 安装方式: 3.1. 如果你能FQ访问谷歌商店,那么就简单了 在这里直接安 ...

  2. httpclient的几种请求URL的方式

    一.httpclient项目有两种使用方式.一种是commons项目,这一个就只更新到3.1版本了.现在挪到了HttpComponents子项目下了,这里重点讲解HttpComponents下面的ht ...

  3. Educational Codeforces Round 37-E.Connected Components?题解

    一.题目 二.题目链接 http://codeforces.com/contest/920/problem/E 三.题意 给定一个$N$和$M$.$N$表示有$N$个点,$M$表示,在一个$N$个点组 ...

  4. AWT,Swing,RCP 开发

    http://www.blogjava.net/youxia/category/17374.html

  5. 转载 关于restTemplate 内部实现

    2016-12-28 by 安静的下雪天  http://www.cnblogs.com/quiet-snowy-day/p/6228198.html  本篇概要 RestTemplate 类图 po ...

  6. JQ与JS等价代码

    选择器 //jquery var els = $(".el"); //原生方法 var els = document.querySelectorAll(".el" ...

  7. OpenLayers3 学习-1

    OpenLayers3 学习-1-简介 OpenLayers3(OL3)对OL2进行了重新设计和实现,支持多种格式的商业和免费的地图数据源.未来的版本将包括显示3D地图或利用WebGL进行大规模矢量数 ...

  8. CentOS上安装 jdk

    先下载最新的jdk版本 文件名:jdk-8u5-linux-x64.rpm 将文件通过winscp上传到/usr/local目录中 rpm -ivh jdk-8u5-linux-x64.rpm 系统会 ...

  9. readonly const

    readonly:只读域,只能在初始化--声明初始化或构造器初始化--的过程中赋值,其他地方不能进行对只读域的赋值操作,否则编译器会报错.只读域可以是实例域也可以是静态域.只读域的类型可以是C#语言的 ...

  10. go_字符和字符串处理

    rune相当于go的char 使用range遍历pos,rune对 使用utf8.RuneCountInString(s)获得字符数量 使用len获得字节长度,使用[]byte获得字节 一般把字节转成 ...