在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 問一下關(guān)于Executors類的問題

問一下關(guān)于Executors類的問題

使用Executors創(chuàng)建線程池的話,比如使用newFixedThreadPool()創(chuàng)建固定大小的線程池,但是它的阻塞隊(duì)列是無界的(Integer.Max),那么如果任務(wù)足夠多,不停的添加到阻塞隊(duì)列,會不會導(dǎo)致內(nèi)存溢出?難道JDK沒有考慮這個問題嗎?

回答
編輯回答
不二心

會溢出的,所以要看情況使用哪幾種類型的線程池

沒問題啊 1 是會溢出的啊 2 jdk怎么會沒考慮這個問題(這還用回答)

所以建議不要用Executors.newFixedThreadPool() 這種 而是自己new ThreadPoolExecutor 指定隊(duì)列 而不是無界隊(duì)列
對于溢出 看你并發(fā)量的 已經(jīng)設(shè)置的線程數(shù) tomcat 也就支持幾百并發(fā) 你這個線程池不太可能溢出 除非你亂搞

2018年1月30日 20:51
編輯回答
凝雅

的確會有問題的,所以你可以直接使用new ThreadPoolExecutor來構(gòu)建一個使用有邊界隊(duì)列的線程池,可以參考Executors里的代碼:

    public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

把LinkedBlockingQueue換掉就行了。

2017年1月4日 00:44