首页 / JAVA / Java线程池工具类
Java线程池工具类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java线程池工具类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2912字,纯文字阅读大概需要5分钟。
内容图文
使用线程池的好处:
-
重用线程,线程的创建和销毁是很耗时的。
-
控制线程的数量。
线程池工具类:
ThreadPool.java
package com.zws.thread.pool; import java.util.concurrent.Callable; import java.util.concurrent.Future; /** * * @author wensh.zhu * */ public interface ThreadPool { void execute(Runnable task); <T> Future<T> submit(Callable<T> task); /** * 线程池是否繁忙 * @return */ boolean isBusy(); }
SimpleThreadPool.java
package com.zws.thread.pool; import java.util.concurrent.Callable; import java.util.concurrent.Future; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * * @author wensh.zhu * */ public class SimpleThreadPool implements ThreadPool{ private static int corePoolSize = 30, maximumPoolSize = 50, capacity = 50000; private static long keepAliveTime = 30 * 1000l; private static LinkedBlockingQueue<Runnable> workQueue; private static ThreadPoolExecutor executor; private static SimpleThreadPool pool = new SimpleThreadPool(); private SimpleThreadPool() { workQueue = new LinkedBlockingQueue<Runnable>(capacity); executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MILLISECONDS, workQueue, new RejectionHandler()); } public static SimpleThreadPool newInstance() { return pool; } public void execute(Runnable task) { executor.execute(task); } public <T> Future<T> submit(Callable<T> task) { return executor.submit(task); } public boolean isQueueFull() { return workQueue.size() == capacity; } public int queueSize() { return workQueue.size(); } public boolean isBusy() { return executor.getPoolSize() == maximumPoolSize && isQueueFull(); } public int poolSize() { return executor.getPoolSize(); } }
RejectionHandler.java
package com.zws.thread.pool; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; /** * * @author wensh.zhu * */ public class RejectionHandler implements RejectedExecutionHandler { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { System.out.println("task " + r + " execute fail"); } }
解释ThreadPoolExecutor类构造函数的参数:
corePoolSize:核心线程数,线程池保有的线程的数量,如果allowCoreThreadTimeOut
参数不设置,即使这些线程空闲也不会被回收。也就是说如果allowCoreThreadTimeOut
参数不设置那么当线程池内的线程的数量升至大于等于corePoolSize后,线程池至少会保有corePoolSize数量的线程。
workQueue:线程池工作队列,当线程池内线程的数量达到corePoolSize并且这些线程都处于忙碌状态时,那么后续提交至线程池的任务会被缓存至工作队列中,当线程池内有空闲线程时就会从此工作队列中取任务并执行。
maximumPoolSize:线程池所允许的最大线程的数量,当工作队列满时,线程池会继续创建新的线程,但是线程池内总线程数量不会超过maximumPoolSize。
keepAliveTime:当线程池内线程的数量超过corePoolSize时,超出部分线程的空闲等待时间,当空闲时间超过此值则超出部分线程就会被回收。
unit:keepAliveTime的单位。
handler:线程池任务拒绝策略接口,当工作队列满并且线程池忙碌线程数量达到maximumPoolSize后,后续提交至线程池的任务会被拒绝,此时回调此接口,自己实现具体的拒绝策略。如果此接口没有指定则报java.util.concurrent.RejectedExecutionException异常。
本文出自 “埃文” 博客,请务必保留此出处http://wenshengzhu.blog.51cto.com/5151285/1952144
原文:http://wenshengzhu.blog.51cto.com/5151285/1952144
内容总结
以上是互联网集市为您收集整理的Java线程池工具类全部内容,希望文章能够帮你解决Java线程池工具类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。