面试题答案
一键面试可能引发的问题
- 内存耗尽:无界队列会不断存储任务,当任务产生速度远大于线程处理速度时,队列会持续膨胀,最终导致内存耗尽,引发OutOfMemoryError。
- 线程饥饿:由于队列是无界的,新任务会持续进入队列,可能使得一些优先级低的任务长时间得不到处理,造成线程饥饿现象。
解决思路
- 使用有界队列:例如使用ArrayBlockingQueue,为队列设置一个固定的容量。当队列满时,新任务根据策略进行处理,如抛出异常、拒绝任务或使用饱和策略。
- 调整线程池参数:合理调整线程池的核心线程数和最大线程数,使线程池能够根据任务负载动态调整线程数量,减少任务在队列中的堆积。
- 采用优先级队列:例如PriorityBlockingQueue,根据任务的优先级来处理任务,避免低优先级任务长时间得不到执行。