今天我在原来的公司离职了,以后我还是会继续努力加油工作!
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * 管理线程池 * * @author itcast * */ public class ThreadManager { private ThreadManager() { } //线程池管理者实例 private static ThreadManager instance = new ThreadManager();
public static ThreadManager getInstance() { return instance; }
private ThreadPoolProxy longPool; //多线程的线程池 private ThreadPoolProxy shortPool; //少线程的线程池 //一个线程池管理者可以new 多个线程池 // 联网比较耗时,本线程池可以用于联网操作 // 一般new几个线程=cpu的核数*2+1 public synchronized ThreadPoolProxy createLongPool() { if (longPool == null) { //先开5个线程,不够用再开5个,如果线程池没有要执行的任务 存活5s longPool = new ThreadPoolProxy(5, 5, 5000L); } return longPool; } // 操作本地文件的线程池 synchronized 加锁,让线程同步 public synchronized ThreadPoolProxy createShortPool() { if(shortPool==null){ //先开3个线程,不够用再开3个,如果线程池没有要执行的任务 存活5s shortPool = new ThreadPoolProxy(3, 3, 5000L);//L是long类型的后缀 } return shortPool; } //内部类,用于创建线程池 public class ThreadPoolProxy {
// ThreadPoolExecutor 是Java提供的线程池 private ThreadPoolExecutor pool; private int corePoolSize; private int maximumPoolSize; private long time; //构造函数,里面的参数是ThreadPoolExecutor的参数 public ThreadPoolProxy(int corePoolSize, int maximumPoolSize, long time) { this.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.time = time; }
/** * 执行任务 * @param runnable */ public void execute(Runnable runnable) { if (pool == null) { // 创建线程池,参数的解释 /* * 1. 线程池里面管理多少个线程 2. 如果排队满了, 额外的开的线程数3. 如果线程池没有要执行的任务 存活多久4.
* 时间的单位 5 如果 线程池里管理的线程都已经用了,剩下的任务 临时存到LinkedBlockingQueue对象中 排队 */ pool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, time, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(10)); } pool.execute(runnable); // 调用线程池 执行异步任务 } /** * 取消任务 * @param runnable */ public void cancel(Runnable runnable) { if (pool != null && !pool.isShutdown() && !pool.isTerminated()) { pool.remove(runnable); // 取消异步任务 } } } }
在主函数中的调用:
ThreadManager.getInstance().createLongPool().execute(new Runnable() { @Override public void run() { //执行耗时操作!
} });
