当前位置: 首页 > news >正文

网站设计与建设网站备份

网站设计与建设,网站备份,电子商城系统平台,建筑网站带图解Java.util中的线程池和Spring框架对这个类的扩展 1.单独通过java里的ThreadPoolExecutor这个类#xff0c;可以创建线程池#xff0c;如果系统采用Spring框架设计#xff0c;可以采用ThreadPoolTaskExecutor这个类来扩展控制#xff0c;这个对维护线程池 最大值和最小值易扩… Java.util中的线程池和Spring框架对这个类的扩展 1.单独通过java里的ThreadPoolExecutor这个类可以创建线程池如果系统采用Spring框架设计可以采用ThreadPoolTaskExecutor这个类来扩展控制这个对维护线程池 最大值和最小值易扩展这个可以在配置文件里修改。其他Spring框架里ThreadPoolTaskExecutor是对ThreadPoolExecutor这个类进行了一层包装。 在多线程大师Doug Lea的贡献下在JDK1.5中加入了许多对并发特性的支持例如线程池。 一、简介 线程池类为 java.util.concurrent.ThreadPoolExecutor常用构造方法为 ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueueRunnable workQueue, RejectedExecutionHandler handler)corePoolSize线程池维护线程的最少数量 maximumPoolSize线程池维护线程的最大数量 keepAliveTime 线程池维护线程所允许的空闲时间 unit 线程池维护线程所允许的空闲时间的单位 workQueue 线程池所使用的缓冲队列 handler 线程池对拒绝任务的处理策略一个任务通过 execute(Runnable)方法被添加到线程池任务就是一个 Runnable类型的对象任务的执行方法就是 Runnable类型对象的run()方法。当一个任务通过execute(Runnable)方法欲添加到线程池时如果此时线程池中的数量小于corePoolSize即使线程池中的线程都处于空闲状态也要创建新的线程来处理被添加的任务。如果此时线程池中的数量等于 corePoolSize但是缓冲队列 workQueue未满那么任务被放入缓冲队列。如果此时线程池中的数量大于corePoolSize缓冲队列workQueue满并且线程池中的数量小于maximumPoolSize建新的线程来处理被添加的任务。如果此时线程池中的数量大于corePoolSize缓冲队列workQueue满并且线程池中的数量等于maximumPoolSize那么通过 handler所指定的策略来处理此任务。也就是处理任务的优先级为核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize如果三者都满了使用handler处理被拒绝的任务。当线程池中的线程数量大于 corePoolSize时如果某线程空闲时间超过keepAliveTime线程将被终止。这样线程池可以动态的调整池中的线程数。unit可选的参数为java.util.concurrent.TimeUnit中的几个静态属性NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。workQueue我常用的是java.util.concurrent.ArrayBlockingQueuehandler有四个选择1.ThreadPoolExecutor.AbortPolicy()抛出java.util.concurrent.RejectedExecutionException异常2.ThreadPoolExecutor.CallerRunsPolicy()重试添加当前的任务他会自动重复调用execute()方法3.ThreadPoolExecutor.DiscardOldestPolicy()抛弃旧的任务4.ThreadPoolExecutor.DiscardPolicy()抛弃当前的任务二、一般用法举例 import java.io.Serializable; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;public class TestThreadPool {private static int produceTaskSleepTime 2;private static int consumeTaskSleepTime 2000;private static int produceTaskMaxNumber 10;public static void main(String[] args) {//构造一个线程池ThreadPoolExecutor threadPool new ThreadPoolExecutor(2, 4, 3,TimeUnit.SECONDS, new ArrayBlockingQueueRunnable(3),new ThreadPoolExecutor.DiscardOldestPolicy());for(int i1;iproduceTaskMaxNumber;i){try {//产生一个任务并将其加入到线程池String task task i;System.out.println(put task);threadPool.execute(new ThreadPoolTask(task));//便于观察等待一段时间Thread.sleep(produceTaskSleepTime);} catch (Exception e) {e.printStackTrace();}}}/*** 线程池执行的任务* author hdpan*/public static class ThreadPoolTask implements Runnable,Serializable{private static final long serialVersionUID 0;//保存任务所需要的数据private Object threadPoolTaskData;ThreadPoolTask(Object tasks){this.threadPoolTaskData tasks;}public void run(){//处理一个任务这里的处理方式太简单了仅仅是一个打印语句System.out.println(start ..threadPoolTaskData);try {便于观察等待一段时间Thread.sleep(consumeTaskSleepTime);} catch (Exception e) {e.printStackTrace();}threadPoolTaskData null;}public Object getTask(){return this.threadPoolTaskData;}} } 说明 1、在这段程序中一个任务就是一个Runnable类型的对象也就是一个ThreadPoolTask类型的对象。 2、一般来说任务除了处理方式外还需要处理的数据处理的数据通过构造方法传给任务。 3、在这段程序中main()方法相当于一个残忍的领导他派发出许多任务丢给一个叫 threadPool的任劳任怨的小组来做。 这个小组里面队员至少有两个如果他们两个忙不过来任务就被放到任务列表里面。 如果积压的任务过多多到任务列表都装不下(超过3个)的时候就雇佣新的队员来帮忙。但是基于成本的考虑不能雇佣太多的队员至多只能雇佣 4个。 如果四个队员都在忙时再有新的任务这个小组就处理不了了任务就会被通过一种策略来处理我们的处理方式是不停的派发直到接受这个任务为止(更残忍呵呵)。 因为队员工作是需要成本的如果工作很闲闲到 3SECONDS都没有新的任务了那么有的队员就会被解雇了但是为了小组的正常运转即使工作再闲小组的队员也不能少于两个。 4、通过调整 produceTaskSleepTime和 consumeTaskSleepTime的大小来实现对派发任务和处理任务的速度的控制改变这两个值就可以观察不同速率下程序的工作情况。 5、通过调整4中所指的数据再加上调整任务丢弃策略换上其他三种策略就可以看出不同策略下的不同处理方式。
http://wiki.neutronadmin.com/news/453814/

相关文章:

  • 长沙网站定制开发建设一个网站建设的课程设计书
  • 怎么使用网站模板织梦摄影网站模板
  • wordpress视频站模板建立网站时首先考虑的问题
  • 消防器材网站建设背景塘下春华网站建设
  • 网站的统计代码手机单页网站生成系统
  • 怎么介绍自己的网站建设企业信用信息网查询系统官网
  • 企业网站设计的功能麻涌建设网站
  • 域名和网站的关系东胜网站建设
  • 网站域名有什么用网站建设费是什么
  • 品牌策划与推广方案网站快速优化排名免费
  • 自己建网站需要服务器么沈阳网站建设搭建
  • 海淀区网站建设吾爱wordpress
  • 榆林市 网站建设前端学习网站建设教程
  • 网站制作周期做淘宝客网站
  • superstore wordpress下载乐云seo
  • 无为网站建设商标注册网站查询系统
  • 做电影类网站百度排行榜前十名
  • 网站建设运维方案网站建设去哪找客户
  • 自己做网站兼职微信手机官网登录入口注册
  • 手机版网站建设费用清单怎样做企业网站备案
  • 东台网站建设服务商kratos的WordPress
  • 网站制作教程切片上海网络营销外包服务公司
  • 网站建设责任分解微信小程序开发官方文档
  • 网站改版什么意思沧州做网站费用
  • 免费手机端网站模板下载工具微信文件传输助手网页版
  • 电子网站建设维护微信网站建设和维护报价表
  • 公众号可以做网站维护链接吗含山县建设局网站
  • 建设网站是否等于网络营销河北专业网站建设
  • 平顶山市网站建设公司seo技术培训教程
  • 校园门户网站开发需求wordpress 文章的形式