您的位置:首页 > 编程语言 > Java开发

【Java学习笔记】ThreadPoolExecutor 基本概念入门

2011-09-04 16:59 771 查看
一、资源

1、 一篇线程池的入门级别的demo

http://www.cublog.cn/u2/70285/showart_1936084.html

2、挺详细的,用的是一样的demo

http://blog.csdn.net/waterbig/article/details/4794244

二、分析

看了一些线程和线程池的资料,自己动手看看

前期:

  整个代码就改了两个地方

    1、为了观察方便

// 便于观察,等待一段时间
System.out.println("thread %s sleep "+Thread.currentThread().getName());
Thread.sleep(produceTaskSleepTime);


   2、这条比较有用,对Queue的操作和策略了解很有用

// 处理一个任务,这里的处理方式太简单了,仅仅是一个打印语句

System.out.println("start .." + threadPoolTaskData+"@"+Thread.currentThread().getName());


 运行:

   基本的一些概念,核心,最大,策略,并行

   当前策略: ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 4, 3,

    TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(3),

   new ThreadPoolExecutor.AbortPolicy());

   参数:core:2 max:4 workQueue: ArrayBlockingQueue 有界队列,大小为3 策略:抛异常

    运行结果:

  


  这里看出:1、2->新建线程,3、4、5入队列,6,7->新建线程,按照策略,8,9,10被拒绝,报错,之后,从队列取出任务,用空闲的线程执行3,4,5.

  


根据策略的说明,若是
ThreadPoolExecutor.DiscardOldestPolicy,应该是3,4,5被抛弃,而执行8,9,10.运行证实。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: