首頁  >  文章  >  Java  >  java創建線程池的四種方式是什麼

java創建線程池的四種方式是什麼

hzc
hzc原創
2020-07-04 15:44:4311284瀏覽

java建立執行緒池的四種方式是:1、newCachedThreadPool建立一個可快取執行緒池;2、newFixedThreadPool建立一個定長執行緒池;3、newScheduledThreadPool建立一個定長執行緒池。

java創建線程池的四種方式是什麼

Java透過Executors提供四種執行緒池,分別為:
newCachedThreadPool建立一個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活回收空閒線程,若無可回收,則新線程。

newFixedThreadPool 建立一個定長執行緒池,可控制執行緒最大並發數,超出的執行緒會在佇列中等待。

newScheduledThreadPool 建立一個定長執行緒池,支援定時及週期性任務執行。

newSingleThreadExecutor 建立一個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,保證所有任務都按照指定順序(FIFO, LIFO, 優先權)執行。

詳細內容可參考博友的部落格Java並發程式設計:執行緒池的使用

1.newCachedThreadPool 這裡的執行緒池是無限大的,當一個執行緒完成任務之後,這個執行緒可以接下來完成將要指派的任務,而不是建立一個新的執行緒。

public static void main(String[] args) {  
        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();  
        for (int i = 0; i < 10; i++) {  
            final int index = i;  
            try {  
                Thread.sleep(10);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }  
            cachedThreadPool.execute(new Runnable() {  
                public void run() {  
                    System.out.println(index);  
                }  
            });  
        }  
    }

2.newFixedThreadPool 

public static void main(String[] args) {  
        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);  
        for (int i = 0; i < 10; i++) {  
            final int index = i;  
            fixedThreadPool.execute(new Runnable() {  
                public void run() {  
                    try {  
                        System.out.println(index);  
                        Thread.sleep(10);  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                }  
            });  
        }  
    }

3.newScheduledThreadPoo

public static void main(String[] args) {  
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);  
        for (int i = 0; i < 10; i++) {  
            scheduledThreadPool.schedule(new Runnable() {  
                public void run() {  
                    System.out.println("delay 3 seconds");  
                }  
            }, 3, TimeUnit.SECONDS);  
        }  
  
    }

4.newSingleThreadExecutor 依序執行執行緒任務  但是不同於單一執行緒,這個執行緒池只是只能存在一個線程,這個線程死後另外一個線程會補上

public static void main(String[] args) {  
        ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();  
        for (int i = 0; i < 10; i++) {  
            final int index = i;  
            singleThreadExecutor.execute(new Runnable() {  
                public void run() {  
/*                  System.out.println(index);*/  
                    try {  
                        System.out.println(index);  
                        Thread.sleep(2000);  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                }  
            });  
        }  
    }

推薦教程: 《java教程

以上是java創建線程池的四種方式是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn