面试题答案
一键面试低负载情况
- 思路:在低负载时,系统资源较为充裕,不需要过多线程。可适当减少线程池最大线程数,避免过多线程带来的上下文切换开销。
- 实现:可以通过定时任务,每隔一段时间(如1分钟)检查系统当前活跃线程数、CPU使用率、内存使用率等指标。如果活跃线程数远低于当前线程池最大线程数,且CPU使用率较低(如低于30%),可逐步减少最大线程数,例如每次减少当前最大线程数的10%,直到活跃线程数接近最大线程数或者达到设定的最小线程数。
中等负载情况
- 思路:中等负载下,线程池需要维持一个适中的线程数量,既能充分利用系统资源,又不过度消耗资源。
- 实现:同样通过定时任务监控系统指标,如CPU使用率在30% - 70%之间。如果当前活跃线程数与最大线程数的比例接近一个设定的合理值(如70% - 80%),则保持当前最大线程数不变。若比例过高,可适当增加最大线程数;若比例过低,可适当减少最大线程数,调整幅度可根据系统实际情况设定,如每次增加或减少5个线程。
高负载情况
- 思路:高负载时,需要充分利用系统资源来处理大量任务,应适当增加线程池最大线程数。
- 实现:持续监控系统指标,当CPU使用率高于70%且活跃线程数持续处于最大线程数,说明系统负载较高,需要增加线程处理能力。可以每次以一定数量(如10个线程)增加最大线程数,直到CPU使用率开始下降或者达到硬件资源限制(如系统可用内存无法支持更多线程创建)。同时要监控系统资源使用情况,避免因线程数过多导致系统崩溃。在实际场景中,如电商促销活动期间,大量用户同时访问系统下单等操作,就会处于高负载状态,此时就需要及时动态增加线程池最大线程数来保障系统性能。