Tôi có một chương trình java nghe trên một cổng cho đầu vào. Dựa trên Input, nó gọi một dịch vụ web và sau đó trả lại thành công / thất bại cho chương trình máy khách.
Tôi rẽ nhánh một chủ đề cho mỗi kết nối khách hàng. Phản hồi lại cho máy khách kết nối với chương trình phải nhanh chóng.
Đây là những lựa chọn tôi đang xem xét
- sử dụng chủ đề thường xuyên
- sử dụng
ExecutorService
vớinewFixedThreadPool
- sử dụng
ExecutorService
vớinewCachedThreadPool
Lý do tôi đang xem xét Pools là vì các chủ đề của tôi bị rút ngắn - họ chỉ cần gọi một dịch vụ web, trả lại kết quả cho khách hàng và đóng kết nối.
Tôi không nghĩ newFixedThreadPool
sẽ là điều đúng đắn vì sau đó các kết nối sẽ đợi trong hàng đợi để nhận một chuỗi.
newCachedThreadPool
sẽ là hoàn hảo ngoại trừ một điều - chủ đề chết sau một phút. Trong trường hợp của tôi, tôi nhận được một loạt các kết nối - tức là nhiều kết nối và sau đó có thể có một thời gian tạm lắng trong vài phút và sau đó lại bùng nổ. Tôi nghĩ rằng các chủ đề trong CacheedThreadPool sẽ chết và một lần nữa sẽ phải được tạo lại - vì vậy trong trường hợp này, đôi khi nó có thể hoạt động như # 1.
Lý tưởng nhất là tôi rất thích có newCachedThreadPool
tối thiểu - tức là một cài đặt cho biết số lượng chủ đề sẽ không bao giờ xuống dưới mức 20. Vì vậy, các chủ đề nhàn rỗi bị giết nhưng không bao giờ cho phép đi dưới ngưỡng tối thiểu.
Có bất cứ điều gì như thế này có sẵn? Hoặc có bất kỳ lựa chọn thay thế tốt hơn?