JDK并发包线程池(三)自定义线程池
来源:互联网 发布:php开发实例大全怎么样 编辑:程序博客网 时间:2024/06/07 23:44
自定义线程池就是自己创建ThreadPoolExecutor对象,根据自己的需求指定里面的各个参数
自定义线程池的拒绝策略,需要实现RejectedExecutionHandler接口
自定义线程的创建工厂ThreadFactory,ThreadFactory是一个工厂,自定义ThreadFactory可以跟踪线程池在某个时刻创建了多少个线程,也可以自定义线程的名称,组以及优先级等信息
public class MyThreadExecutorPool { public static void main(String[] args) { ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10),new ThreadFactory() { @Override public Thread newThread(Runnable r) { Thread thread = new Thread(r); //将线程设置成为守护线程,这样当主线程退出的时候,线程池就会被销毁了,因为守护线程就是用来为主线程服务的,主线程退出了,守护线程当然退出 //thread.setDaemon(true); System.out.println("线程创建完毕"+Thread.currentThread().getId()); return thread; } },new RejectedExecutionHandler() { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { //DiscardPolicy过于简单,直接就默默地抛弃了不能执行的任务,这里我们可以打印出一些信息 System.out.println(r.toString()+"isDiscard"); } }); for(int i=0;i<20;i++){ poolExecutor.submit(new MyTask(i)); } }}class MTask implements Runnable{ private int i; public MTask(int i) { super(); this.i = i; } @Override public void run() { System.out.println(new Date().getTime()+"___"+Thread.currentThread().getId()+"___"+i); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } }}
上面程序的运行可能结果:
线程创建完毕1 //证明这个方法的调用是由主线程完成的线程创建完毕1线程创建完毕1线程创建完毕1线程创建完毕1//因为corePoolSize=maxmiumPoolSize,并且任务队列是有界队列,当新的任务提交后发现队列满了,线程的数量也达到maxmium,然后就会拒绝执行java.util.concurrent.FutureTask@3fd97efcisDiscard java.util.concurrent.FutureTask@69dfe453isDiscardjava.util.concurrent.FutureTask@6a073b72isDiscardjava.util.concurrent.FutureTask@cfefc0isDiscardjava.util.concurrent.FutureTask@19501026isDiscard1497184497324___10___11497184497324___11___21497184497324___12___31497184497324___13___41497184497324___9___01497184498324___13___51497184498324___10___61497184498325___11___71497184498326___12___81497184498326___9___91497184499325___13___101497184499325___10___111497184499325___11___121497184499326___12___131497184499326___9___14
阅读全文
0 0
- JDK并发包线程池(三)自定义线程池
- JDK并发包中的线程池(一)
- JDK并发包中的线程池(二)核心线程池的内部实现
- java线程池并发包
- Java线程总结(五):并发包------线程池Executors
- java并发包:线程复用之线程池
- Java并发包使用及源码浅析(线程池)
- 《并发编程》--14.Java线程池和自定义线程
- Java并发之线程池(三)
- 深入学习JDK 线程池(之三)
- Java 并发编程之线程池的使用 (三)
- Java 并发编程之线程池的使用 (三)
- 并发编程--线程池拒绝策略RejectedExecutionHandler(三)
- Java 1.5并发包之三:线程池实现之Fork/Join框架
- JDK并发包---(11)线程阻塞工具类:LockSupport
- JDK并发包---(7)允许多个线程同时访问的:信号量(Semaphore)
- JDK中的线程池
- ThreadPoolExecutor JDK线程池
- 限制容器对内存的使用
- (6/10)Servlet入门
- 单例模式之线程安全
- 2.下拉刷新 用第三方插件XListView怎么弄
- 使用Intellij IDEA通过Maven+Hibernate+Spring Mvc构建Java后台
- JDK并发包线程池(三)自定义线程池
- 一个简单的JavaScript放大镜
- Eclipselink多租户的实现
- 实验吧——WriteUp&&涨姿势(5)
- maven常用命令介绍
- hp-ux 下的apa配置方法
- Zookeeper实例原生API--异步获取节点数据
- Pycharm中不支持中文编码的解决方案。Pycharm中文报错。
- 学习之路漫长