解读阿里巴巴Java手册:为什么不建议使用Executors创建线程池?
Executors 是一個(gè)Java中的工具類。提供工廠方法來(lái)創(chuàng)建不同類型的線程池。
從上圖中也可以看出,Executors的創(chuàng)建線程池的方法,創(chuàng)建出來(lái)的線程池都實(shí)現(xiàn)了ExecutorService接口。
可以發(fā)現(xiàn),其實(shí)底層確實(shí)是通過(guò)LinkedBlockingQueue實(shí)現(xiàn)的:LinkedBlockingQueue是一個(gè)用鏈表實(shí)現(xiàn)的有界阻塞隊(duì)列,容量可以選擇進(jìn)行設(shè)置,不設(shè)置的話,將是一個(gè)無(wú)邊界的阻塞隊(duì)列,最大長(zhǎng)度為Integer.MAX_VALUE。如果我們不設(shè)置LinkedBlockingQueue的容量的話,其默認(rèn)容量將會(huì)是Integer.MAX_VALUE。
newCachedThreadPool和newScheduledThreadPool這兩種方式創(chuàng)建的最大線程數(shù)可能是Integer.MAX_VALUE,而創(chuàng)建這么多線程,就有可能導(dǎo)致內(nèi)存溢出。
避免使用Executors創(chuàng)建線程池,主要是避免使用其中的默認(rèn)實(shí)現(xiàn),那么我們可以自己直接調(diào)用ThreadPoolExecutor的構(gòu)造函數(shù)來(lái)自己創(chuàng)建線程池。在創(chuàng)建的同時(shí),給BlockQueue指定容量就可以了。
Java ThreadPoolExecutor線程池的使用
總結(jié)
以上是生活随笔為你收集整理的解读阿里巴巴Java手册:为什么不建议使用Executors创建线程池?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [转帖] mysql 用户 权限 密码等
- 下一篇: JavaWeb无限级分销结构分析