Cách tốt nhất để xử lý RejectedExecutionException
trong khi sử dụng ThreadPoolExecutor
trong Java là gì?Làm thế nào để xử lý RejectedExecutionException với ThreadPoolExecutor trong java
Tôi muốn đảm bảo rằng tác vụ được gửi không nên bỏ qua và chắc chắn sẽ được thực hiện. Hiện tại không có yêu cầu thời gian thực khó để hoàn thành nhiệm vụ.
Một trong những điều tôi nghĩ có thể được thực hiện là chờ đợi trong một vòng lặp cho đến khi tôi biết rằng có không gian trong hàng đợi runnable, và sau đó đi vào và thêm nó vào hàng đợi.
Sẽ rất vui nếu mọi người có thể chia sẻ trải nghiệm của họ.
Thêm giải pháp khả thi Tôi mặc dù:
while(executor.getQueue().remainingCapacity <= 0){
// keep looping
Thread.sleep(100);
};
//if the loop exits ,indicates that we have space in the queue hence
//go ahead and add to the queue
executor.execute(new ThreadInstance(params));
Điều này sẽ tạo điều kiện cho cuộc đua nếu có nhiều hơn một chuỗi đang cố thực hiện điều này. Nó cũng sẽ ghi một cpu có thể có nghĩa là phải mất nhiều thời gian hơn để người thực thi xóa hàng đợi. ví dụ. nếu chỉ có một CPU cho trình bổ sung và trình thực thi, điều này có thể là thảm họa. –
Từ kiến trúc sẽ chỉ có một chủ đề làm điều này, và để xử lý thời gian CPU ăn, tôi đang làm cho giấc ngủ thread.How hiện này nhìn bây giờ? – Neeraj
Ngủ, ngay cả trong một thời gian ngắn (thậm chí 1 - 10 ms) là tốt hơn nhiều so với không. 100 ms cũng là một giá trị tốt. Điều này là tốt nếu bạn chỉ có một chủ đề xuất bản. –