我有一个 Java 客户端,它通过 HTTP 访问我们的服务器端,发出几个小请求来加载每个新的数据页面。我们维护一个线程池来处理所有非 UI 处理,因此任何后台客户端任务和任何想要与服务器建立连接的任务。我一直在研究一些性能问题,但我不确定我们的线程池设置是否尽可能好。目前我们使用核心池大小为 8 的 ThreadPoolExecutor,我们使用 LinkedBlockingQueue 作为工作队列,因此忽略最大池大小。毫无疑问,在所有情况下都没有简单的做这件事的答案,但是有没有最佳实践。我此刻的想法是
1) 我将切换到使用 SynchronousQueue 而不是 LinkedBlockingQueue 以便池可以增长到最大池大小数字。2)我将最大池大小设置为无限制。
基本上,我目前担心的是,由于线程池大小的上限,服务器端偶尔出现的性能问题会导致无关的客户端处理停止。我对无界的恐惧是在客户端上管理这些线程的额外打击,可能只是两个弊端中更好的一个。
有什么建议、最佳实践或有用的参考吗?干杯,罗宾