package zy.just.com.googleplaydemo.manager; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * 管理线程池 * Created by print on 2016/3/8. */ public class ThreadManager { //把构造方法私有。 private ThreadManager() { } private static ThreadManager instance = new ThreadManager(); private ThreadPoolProxy longPool; private ThreadPoolProxy shortPool; public static ThreadManager getInstance() { return instance;//返回线程管理者的实例。 } // 连接网络比较耗时。 // 读取本地文件比较快。 /** * 提供创建线程池的方法, 开多少个线程的效率最高,cpu的核数*2+1,例如单核cpu最好开3个线程,双核cpu最好开5个线程。 */ // 这个线程池用于连接网络等耗时操作。注意:这个方法必须保证线程同步。 public synchronized ThreadPoolProxy createThreadLongPoolProxy() { if (longPool == null) { longPool = new ThreadPoolProxy(5, 5, 5000L); } return longPool; } // 执行读取本地文件等相对比较快的操作。 public synchronized ThreadPoolProxy createThreadShortPoolProxy() { if (shortPool == null) { shortPool = new ThreadPoolProxy(3, 3, 5000L); } return shortPool; } /** * 内部类,线程池配置(代理) */ public class ThreadPoolProxy { //这个类代表线程池 private ThreadPoolExecutor pool; private int corePoolSize;//这个线程池中管理多少个线程 private int maximumPoolSize; private long time; public ThreadPoolProxy(int corePoolSize, int maximumPoolSize, long time) { this.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.time = time; } public void execute(Runnable runnable) { if (pool == null) { //创建线程池 /** * 1.corePoolSize:这个线程池中管理多少个线程。 * 2.如果LinkedBlockingDeque满了,则额外开的线程数。 3.如果线程池已经没有任务了,设置它还能存活多久。 * 4.时间内单位 (一般用毫秒)5.如果线程池里的管理的线程都已经在使用中,(即没有空余线程了), * 剩下的任务都先临时存到LinkedBlockingDeque(10)对象中排队,10表示最多有10个任务在排队。 */ pool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, time, TimeUnit.MILLISECONDS, new LinkedBlockingDeque<Runnable>(10)); } //线程池执行任务 pool.execute(runnable);//调用线程池执行异步任务。 } /** * 停止一个任务 */ public void cancel(Runnable runnable) { // 分别表示线程池是否为空,线程池是否崩溃了,线程池是否停止了。 if (pool != null && !pool.isShutdown() && !pool.isTerminated()) { // 移除一个异步任务 pool.remove(runnable); } } } }
java线程池ThreadPoolExecutor的使用
最新推荐文章于 2023-08-29 23:46:56 发布