LinkedBlockingQueue 不是无界,只是默认是Integer.MAX_VALUE
很多面试宝典也好,面试题目也好,都在说是因为Executors创建FixedThreadPool池时,发现创建的队列为LinkedBlockingQueue,是一个无界阻塞队列,会导致OOM。都在说LinkedBlockingQueue 是无界导致的。
其实,看了源码,发现它的构造方法中明确写了如果不指定初始化容量大小,默认的无参构造,初始化的容量是Integer.MAX_VALUE,这个值是十分大的。
因此,个人觉得,这个大小太大了,如果不停往里面添加线程,导致OOM。原因可以说就是LinkedBlockingQueue 导致的,其实说它无界也没问题,当发生了OOM时,线程数并没有达到它的最大值。