java線程池的理解

線程池的原理正在學習中,如有不當之處,請勿見怪,這篇文章僅僅是我怕忘記而寫的。

1.線程池出現(xiàn)的原因
當需要使用很多個線程時,如果還是采用簡單的創(chuàng)建線程的方式,會導致系統(tǒng)開銷變大。
因為在創(chuàng)建線程和關閉線程中會占用系統(tǒng)開銷。如果一個線程在執(zhí)行完一個任務繼續(xù)執(zhí)行下一個任務,那么效率將大大提高。
2.線程池正是解決了上面的問題,只要定義好任務,然后交給線程池,你不需要知道它是如何執(zhí)行的、被哪個線程執(zhí)行的、什么時候執(zhí)行的。
3.具體的實現(xiàn)原理大家可以參照海子的博客:http://www.cnblogs.com/dolphin0520/p/3932921.html
4.簡單的線程池實例和分析

public class ExecutorCase {
    private static Executor executor = Executors.newFixedThreadPool(5);

    public static void main(String[] args) {
        for (int i = 0; i <10 ; i++) {
            System.out.println("第"+i+"次執(zhí)行");
            executor.execute(new Task());
            executor.execute(new Task1());
        }
    }
    static  class Task1  implements  Runnable{
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"---");
        }
    }
    static class Task implements Runnable{
        public void run(){
            System.out.println(Thread.currentThread().getName());
        }
    }
}

執(zhí)行結(jié)果
第0次執(zhí)行
pool-1-thread-1
第1次執(zhí)行
第2次執(zhí)行
pool-1-thread-2---
pool-1-thread-3
pool-1-thread-4---
第3次執(zhí)行
pool-1-thread-1---
pool-1-thread-2---
pool-1-thread-3
第4次執(zhí)行
pool-1-thread-5
pool-1-thread-1---
pool-1-thread-4
第5次執(zhí)行
第6次執(zhí)行
pool-1-thread-3---
第7次執(zhí)行
pool-1-thread-5
pool-1-thread-2
pool-1-thread-3---
pool-1-thread-4
第8次執(zhí)行
pool-1-thread-1---
pool-1-thread-2---
pool-1-thread-5
第9次執(zhí)行
pool-1-thread-3
pool-1-thread-4---

5.結(jié)果分析
可以看到線程的執(zhí)行是沒有順序的,當executor.execute(new Task())執(zhí)行完成后就會創(chuàng)建一個線程,并執(zhí)行start()方法,讓線程處于就緒狀態(tài),至于什么時候它能執(zhí)行,這是由cpu調(diào)度決定的。
這里設置了corePoolSize為5,線程池的數(shù)量大于5后,新進來的任務將進入阻塞隊列中,等待線程池中的某個線程空閑下來后,再從阻塞隊列中獲取。

  • 如果當前線程池中的線程數(shù)目小于corePoolSize,則每來一個任務,就會創(chuàng)建一個線程去執(zhí)行這個任務;
  • 如果當前線程池中的線程數(shù)目>=corePoolSize,則每來一個任務,會嘗試將其添加到任務緩存隊列當中,若添加成功,則該任務會等待空閑線程將其取出去執(zhí)行;若添加失?。ㄒ话銇碚f是任務緩存隊列已滿),則會嘗試創(chuàng)建新的線程去執(zhí)行這個任務;
  • 如果當前線程池中的線程數(shù)目達到maximumPoolSize,則會采取任務拒絕策略進行處理;
  • 如果線程池中的線程數(shù)量大于 corePoolSize時,如果某線程空閑時間超過keepAliveTime,線程將被終止,直至線程池中的線程數(shù)目不大于corePoolSize;如果允許為核心池中的線程設置存活時間,那么核心池中的線程空閑時間超過keepAliveTime,線程也會被終止。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 【JAVA 線程】 線程 進程:是一個正在執(zhí)行中的程序。每一個進程執(zhí)行都有一個執(zhí)行順序。該順序是一個執(zhí)行路徑,或者...
    Rtia閱讀 2,893評論 2 20
  • 一徑殘紅水滿池, 幾段情波入夢里。 人生得失皆由己, 閑賦楚辭舒心意。
    Jack2451閱讀 498評論 0 0
  • 摘要:閑魚技術-正物 問題背景 對于開發(fā)者而言,什么是Flutter?它是用什么語言編寫的,包含哪幾部分,是如何被...
    貓耳呀閱讀 2,742評論 1 7
  • 王德昌是王家的獨子,他和本村的老趙家的女兒秋蘭結(jié)婚了,當年結(jié)婚當年生...
    夏所珍創(chuàng)作室閱讀 1,056評論 0 2
  • 作為一個學生的我,時不時能聽到老師在講臺上發(fā)飆,那我們調(diào)皮、不認真和很壞,其實都是表達一個意思,老師的怒火。經(jīng)常也...
    有陰暗閱讀 275評論 0 0

友情鏈接更多精彩內(nèi)容