Số lượng tác vụ (chủ đề) được gửi cũng không lớn trong kịch bản thử nghiệm này.Tại sao Executors.newCachedThreadPool ném java.util.concurrent.RejectedExecutionException trong khi gửi
Trả lời
Bạn sẽ cần phải cung cấp mẫu mã như thế nào bạn nhanh chóng và gọi submit
trên hồ bơi (IP nên một tổ chức phi Vấn đề ở đây là chúng ta không cần chi tiết của ruột của Callable
lớp hoặc bất cứ điều gì giống như của bạn cái đó).
Dựa trên thông tin bạn đã cung cấp, bạn gần như chắc chắn sẽ tắt dịch vụ thực thi ở đâu đó trước khi gửi cuộc gọi đến nó. Kiểm tra xem bạn có thực hiện bất kỳ cuộc gọi nào tới shutdown
hoặc shutdownNow
và nếu như vậy đảm bảo rằng bạn không thêm công việc sau thời điểm này.
Ngoài ra, bạn có thể muốn đăng ký triển khai của riêng mình java.util.concurrent.RejectedExecutionHandler
để hỗ trợ gỡ lỗi; thông điệp rejectedExecution của nó sẽ được gọi bất cứ khi nào người thi hành không thể chấp nhận một nhiệm vụ, vì vậy bạn có thể đặt một số logic kiểm tra trạng thái thô sơ ở đó để giúp bạn tìm ra nguyên nhân.
Bạn đã đúng; Tôi tìm thấy mã đã được tắt hồ bơi thực hiện; cảm ơn –
Tôi không thấy bất cứ nơi nào trong yêu cầu của các phương pháp Executors.newCachedThreadPool()
trong đó RejectedExecutionException
bị ném. Chỉ có ba trường hợp nó dường như được ném trong Java 6:
- khi gọi
execute()
trênThreadPoolExecutor
và kích thước hồ bơi tối đa đã đạt tới. - khi gọi
execute()
trên sốThreadPoolExecutor
cùng lúc vớishutdownNow
và về cơ bản đã bị mất cuộc đua với cuộc gọishutdownNow
. - khi cố gắng lên lịch thực hiện một lần chạy trong một
ScheduledThreadPoolExecutor
sau khi người thực hiện đã bị tắt.
+1 để liệt kê tất cả các trường hợp có thể xảy ra –
Bạn có thể tinh chỉnh câu hỏi của mình không? Ví dụ. thêm một testcase ngắn. – Kutzi
Xin lỗi, không có nhiều mã tôi có thể chia sẻ vì lý do IP. Trong vỏ hạt, tôi đang gọi gửi với các loại có thể gọi là. Tôi đang tìm các kịch bản tiềm năng mà điều này có thể xảy ra. –
Bạn đang nói rằng không có kịch bản cụ thể mà bạn đang xem xét, nhưng thay vào đó muốn biết về các kịch bản giả định, nơi ngoại lệ này có thể được ném ra? nếu có, bạn nên viết lại câu hỏi từ 'Tại sao ...' thành 'Khi nào ...' – akf