线程池使用不当导致爆内存
先看个代码:
上面代码产生的问题
生产两台服务器爆内存,被搞死了
分析原因
方法内部使用了线程池, 方法被请求一次,就会创建一个线程池,每个线程池都存活着一个线程, 并且被占用的内存不会被GC回收
o = future.get(1, TimeUnit.MILLSECONDS) ; 这行代码是为了获取异步线程的返回值,但是超时时间设置的太少 1毫秒,也会造成问题
结论
如果局部使用线程池,用完后不再使用它,一定记得手动关闭线程池,否则跑着跑着就内存爆炸崩溃。回收函数如下:
1 | //执行此函数后线程池不再接收新任务,并等待所有任务执行完毕后销毁线程。此函数并不会等待线程销毁完毕,而是立即返回的 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ING-BLOG!
评论