這篇博客主要是用來復習java中的線程的生命周期與線程池。
1.線程的生命周期
2.線程池
線程池是預先創建線程的一種技術。線程池在還沒有任務到來之前,創建 一定數量的線程,放入空閑隊列中,然后對這些資源進行復用。減少頻繁的創建和銷毀對象。 jdk1.5版本以上提供了現成的線程池,Java里面線程池的頂級接口是Executor,是一個執行線程的工具。線程池接口是ExecutorService.
在Executors類里面提供了一些靜態的工廠,生成一些常用的線程池。
java.util.concurrent包:并發編程中很常用的使用工具類 Executor接口: 執行已經提交的Runnable接口
ExecutorService接口: Executor提供了管理終止的方法,以及可為跟蹤一個或者多個異步任務執行狀況而生成的Future的方法
Executor類: 此包中所定義的Executor、ExecutorService等的工廠和實用方法
newSingleThreadExecutor: 創建一個單線程的線程池。這個線程池只有一個線程在工作,也就是相當于單線程串執行所有任務。如果這個唯一的線程因為異常結束,那么會有一個新的線程來替代它。此線程池保證所有任務的執行順序按照任務的提交順序執行
newFixedThreadPool: 創建固定大小的線程池。每次提交一個任務就創建一個線程,直到達到線程池的最大大小。線程池的大小一旦達到最大值就是保持不變,如果某個線程因為執行異常而結束,那么線程池會補充一個新的線程。
newCachedThreadPool: 創建一個可緩存的線程池。如果線程池的大小超過了處理任務所需要的線程,那么就會回收部分空閑(60秒不執行的任務)的線程,當任務數增加時,此線程池又可以智能添加新線程來處理任務。此線程池不會對線程池大小做限制,線程池大小完全依賴于操作系統(或者說JVM)可以創建的最大的線程的大小
new ScheduledThreadPool:創建一個大小無限的線程池。此線程池 支持定時以及周期性執行任務的需求。
** * 線程池 */public class ThreadPoolDemo { public static void main(String args[]) { //創建一個單線程的線程池 // ExecutorService es= Executors.newSingleThreadExecutor(); //創建一個固定大小的線程池 //ExecutorService es=Executors.newFixedThreadPool(2); //創建一個可以緩存的線程池,會進行回收空閑線程 // ExecutorService es=Executors.newCachedThreadPool(); //創建一個大小無限制的線程池,參數為最少的線程數,不會回收 ExecutorService es=Executors.newScheduledThreadPool(2); //執行線程 es.execute(new MyThread()); es.execute(new MyThread()); }}class MyThread implements Runnable{ @Override public void run() { for(int i=0;i<10;i++) { try { Thread.sleep(1000); }catch (InterruptedException ex) { ex.PRintStackTrace(); } System.out.println("MyThread-"+i); } }}新聞熱點
疑難解答