Java線程池需要我們不斷的學習其實我們在使用的時候還是有不少問題需要我們解決我們實現了一個簡單的Java線程池現在我們就可以使用它了下面的代碼做了一個簡單的示例
Java代碼
public class SimpleTaskTest extends Task {
@Override
public void deal() {
// do something
}
public static void main(String[] args) throws InterruptedException {
ThreadPoolService service = new ThreadPoolService();
servicestart();
// 執行十次任務
for (int i = ; i < ; i++) {
servicerunTask(new SimpleTaskTest());
}
// 睡眠秒鐘等待所有任務執行完畢
Threadsleep();
servicestop();
}
}
public class SimpleTaskTest extends Task {
@Override
public void deal() {
// do something
}
public static void main(String[] args) throws InterruptedException {
ThreadPoolService service = new ThreadPoolService();
servicestart();
// 執行十次任務
for (int i = ; i < ; i++) {
servicerunTask(new SimpleTaskTest());
}
// 睡眠秒鐘等待所有任務執行完畢
Threadsleep();
servicestop();
}
}
當然我們實現的是最簡單的這裡只是為了演示Java線程池的實現原理在實際應用中根據情況的不同可以做很多優化比如
調整任務隊列的規則給任務設置優先級級別高的任務優先執行
動態維護Java線程池當待執行任務數量較多時增加線程的數量加快任務的執行速度當任務較少時回收一部分長期閒置的Java線程池減少對系統資源的消耗
事實上Java及以上版本已經為我們提供了線程池功能無需再重新實現這些類位於ncurrent包中
Executors類提供了一組創建Java線程池對象的方法常用的有一下幾個
Java代碼
public static ExecutorService newCachedThreadPool() {
// other code
}
public static ExecutorService newFixedThreadPool(int nThreads) {
// other code
}
public static ExecutorService newSingleThreadExecutor() {
// other code
}
public static ExecutorService newCachedThreadPool() {
// other code
}
public static ExecutorService newFixedThreadPool(int nThreads) {
// other code
}
public static ExecutorService newSingleThreadExecutor() {
// other code
}
newCachedThreadPool()方法創建一個動態的線程池其中線程的數量會根據實際需要來創建和回收適合於執行大量短期任務的情況newFixedThreadPool(int nThreads)方法創建一個包含固定數量線程對象的Java線程池nThreads代表要創建的線程數如果某個線程在運行的過程中因為異常而終止了那麼一個新的線程會被創建和啟動來代替它而newSingleThreadExecutor()方法則只在線程池中創建一個線程來執行所有的任務
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27383.html