使用Executors创建线程池的话,比如使用newFixedThreadPool()创建固定大小的线程池,但是它的阻塞队列是无界的(Integer.Max),那么如果任务足够多,不停的添加到阻塞队列,会不会导致内存溢出?难道JDK没有考虑这个问题吗?
使用Executors创建线程池的话,比如使用newFixedThreadPool()创建固定大小的线程池,但是它的阻塞队列是无界的(Integer.Max),那么如果任务足够多,不停的添加到阻塞队列,会不会导致内存溢出?难道JDK没有考虑这个问题吗?
会溢出的,所以要看情况使用哪几种类型的线程池
没问题啊 1 是会溢出的啊 2 jdk怎么会没考虑这个问题(这还用回答)
所以建议不要用Executors.newFixedThreadPool() 这种 而是自己new ThreadPoolExecutor 指定队列 而不是无界队列
对于溢出 看你并发量的 已经设置的线程数 tomcat 也就支持几百并发 你这个线程池不太可能溢出 除非你乱搞
4 回答1.1k 阅读✓ 已解决
4 回答1.1k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答691 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.6k 阅读
2 回答1.3k 阅读
的确会有问题的,所以你可以直接使用
new ThreadPoolExecutor
来构建一个使用有边界队列的线程池,可以参考Executors
里的代码:把LinkedBlockingQueue换掉就行了。