thể trùng lặp:
Java Executors: how can I set task priority?đợi Sắp xếp lại trong ThreadPoolExecutor Java
Tôi có một ThreadPoolExecutor xây dựng sử dụng một LinkedBlockingDequeue và tôi muốn thao tác hàng đợi cơ bản, tuy nhiên đọc bài viết này trong tài liệu làm tôi rất lo lắng.
bảo trì Queue
Phương pháp getQueue() cho phép truy cập vào hàng đợi công việc cho các mục đích giám sát và gỡ lỗi. Sử dụng phương pháp này cho bất kỳ mục đích nào khác không được khuyến khích mạnh mẽ. Hai phương thức được cung cấp, loại bỏ (java.lang.Runnable) và purge() có sẵn để hỗ trợ trong việc phục hồi lưu trữ khi số lượng lớn các tác vụ xếp hàng bị hủy bỏ.
Cụ thể là tôi muốn để có thể
- Kiểm tra hàng đợi để xem nếu một phần tử đã tồn tại. Tôi cho rằng điều này là tốt vì không cần khóa nên chỉ cần xem các phần tử trong hàng đợi.
- Tôi muốn sắp xếp lại hàng đợi dựa trên một số tín hiệu. Điều này rõ ràng có thể là rắc rối. Tôi đã tự hỏi nếu có một cách ưa thích để làm điều này để tôi sẽ không mess lên hàng đợi cho sử dụng khác.
Cảm ơn
Là ghi chú tài liệu, bạn không nên kiểm soát hàng đợi từ phương thức đó. Bạn nên kiểm soát nó từ hàng đợi mà bạn đã chuyển vào 'ThreadPoolExecutor' của bạn. – pickypg
Nhưng điều đó vẫn không có nguy cơ gặp vấn đề về luồng không? Tôi nghĩ rằng nếu tôi gọi getQueue() đó là giống như sửa đổi các đối tượng hàng đợi thực tế tôi vượt qua trong. – Jon
Tôi không nghĩ rằng tôi có thể sử dụng một PriorityComparator như được đề xuất trong câu hỏi khác bởi vì PriorityComparator không cung cấp cách nào để sắp xếp lại các phần tử khi chúng nằm trong hàng đợi. – Jon