java.util.concurrent包下的類詳細解釋
1. java.util.concurrent.Executorsimport java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit;
public class newFixedThreadPool { public static void main(String[] args) throws InterruptedException{ ExecutorService service = Executors.newFixedThreadPool(2); for (int i = 0; i < 4; i++) { Runnable run = new Runnable() { @Override public void run() { System.out.println("thread start"); } }; service.execute(run); } service.shutdown(); service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS); System.out.println("all thread complete");
} }</pre>
output:
thread start
thread start
thread start
thread start
all thread completenewFixedThreadPool創建一個固定大小的線程池。
shutdown():用于關閉啟動線程,如果不調用該語句,jvm不會關閉。
awaitTermination():用于等待子線程結束,再繼續執行下面的代碼。該例中我設置一直等著子線程結束。
ExecutorService 建立多線程的步驟:
1。定義線程類 | class Handler implements Runnable{ } |
</tr>
||||||||||||||||||||||||||||||||||||
2。建立ExecutorService線程池 | ExecutorService executorService = Executors.newCachedThreadPool(); 或者 int cpuNums = Runtime.getRuntime().availableProcessors(); ExecutorService executorService =Executors.newFixedThreadPool(cpuNums * POOL_SIZE); |
</tr>
||||||||||||||||||||||||||||||||||||
3。調用線程池操作 | 循環操作,成為daemon,把新實例放入Executor池中 execute(Runnable對象)方法 其實就是對Runnable對象調用start()方法 (當然還有一些其他后臺動作,比如隊列,優先級,IDLE timeout,active激活等) |
</tr>
</tbody>
</table>
1.newCachedThreadPool() |
-緩存型池子,先查看池中有沒有以前建立的線程,如果有,就reuse.如果沒有,就建一個新的線程加入池中 -緩存型池子通常用于執行一些生存期很短的異步型任務 -能reuse的線程,必須是timeout IDLE內的池中線程,缺省timeout是60s,超過這個IDLE時長,線程實例將被終止及移出池。 |
</tr>
||||||||||||||||||||||||||||
2. newFixedThreadPool | -newFixedThreadPool與cacheThreadPool差不多,也是能reuse就用,但不能隨時建新的線程 -其獨特之處:任意時間點,最多只能有固定數目的活動線程存在,此時如果有新的線程要建立,只能放在另外的隊列中等待,直到當前的線程中某個線程終止直接被移出池子 -和cacheThreadPool不同,FixedThreadPool沒有IDLE機制(可能也有,但既然文檔沒提,肯定非常長,類似依賴上層的TCP或UDP IDLE機制之類的),所以FixedThreadPool多數針對一些很穩定很固定的正規并發線程,多用于服務器 -從方法的源代碼看,cache池和fixed 池調用的是同一個底層池,只不過參數不同: fixed池線程數固定,并且是0秒IDLE(無IDLE) cache池線程數支持0-Integer.MAX_VALUE(顯然完全沒考慮主機的資源承受能力),60秒IDLE |
</tr>
||||||||||||||||||||||||||||
3.ScheduledThreadPool | -調度型線程池 -這個池子里的線程可以按schedule依次delay執行,或周期執行 |
</tr>
||||||||||||||||||||||||||||
4.SingleThreadExecutor | -單例線程,任意時間池中只能有一個線程 -用的是和cache池和fixed池相同的底層池,但線程數目是1-1,0秒IDLE(無IDLE) |
</tr>
</tbody>
</table>
|
</tr>
</tbody>
</table>
也可自己定義ThreadFactory,加入建立池的參數中
|
</tr>
</tbody>
</table>
|
</tr>
</tbody>
</table>