執行緒池工具類封裝
阿新 • • 發佈:2018-11-04
一、 為什麼要使用執行緒池:
1.頻繁建立和銷燬執行緒耗資源,耗時間,換句話說,執行緒池就能節約資源,節約時間。
2.有的執行緒執行任務的時間甚至比建立和銷燬執行緒的時間還短。
二 、執行緒池的作用:
執行緒池是預先建立執行緒的一種技術。執行緒池在還沒有任務到來之前,建立一定數量的執行緒,加入空閒佇列中,然後對這些資源進行復用,減少頻繁的建立和銷燬物件。
/** * Created by zhanggonglin on 2018/11/1. */ import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * 執行緒池管理的工具類 */ public class ThreadManager { //通過ThreadPoolExecutor的代理類來對執行緒池的管理 private static ThreadPollProxy mThreadPollProxy; //單列物件 public static ThreadPollProxy getThreadPollProxy() { synchronized (ThreadPollProxy.class) { if (mThreadPollProxy == null) { mThreadPollProxy = new ThreadPollProxy(3, 6, 1000); } } return mThreadPollProxy; } //通過ThreadPoolExecutor的代理類來對執行緒池的管理 public static class ThreadPollProxy { private ThreadPoolExecutor poolExecutor;//執行緒池執行者 ,java內部通過該api實現對執行緒池管理 private int corePoolSize; private int maximumPoolSize; private long keepAliveTime; public ThreadPollProxy(int corePoolSize, int maximumPoolSize, long keepAliveTime) { this.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.keepAliveTime = keepAliveTime; } //對外提供一個執行任務的方法 public void execute(Runnable r) { if (poolExecutor == null || poolExecutor.isShutdown()) { poolExecutor = new ThreadPoolExecutor( //核心執行緒數量 corePoolSize, //最大執行緒數量 maximumPoolSize, //當執行緒空閒時,保持活躍的時間 keepAliveTime, //時間單元 , // 毫秒級 TimeUnit.MILLISECONDS, //執行緒任務佇列 new LinkedBlockingQueue<Runnable>(), //建立執行緒的工廠 Executors.defaultThreadFactory()); } poolExecutor.execute(r); } }
用法:
ThreadManager.getThreadPollProxy().execute(new Runnable() {
@Override
public void run() {
//請求網路相關等耗時的操作
}
});