Tôi đã tìm kiếm rất nhiều nhưng không thể tìm thấy bất kỳ giải pháp nào. Tôi sử dụng hồ bơi chuỗi java theo cách như vậy:Chỉ định thực hiện lệnh công việc trong Java
ExecutorService c = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; ++i) {
c.execute(new MyTask(i));
}
Theo cách như vậy Nhiệm vụ được thực hiện theo thứ tự sau đó (như xếp hàng). Nhưng tôi cần thay đổi chiến lược "chọn công việc tiếp theo". Vì vậy, tôi muốn gán cho mỗi nhiệm vụ xác định ưu tiên (nó không phải là ưu tiên luồng) và thực hiện các nhiệm vụ tương ứng với các ưu tiên này. Vì vậy, khi người thực thi đã hoàn thành một nhiệm vụ khác, nó chọn tác vụ tiếp theo là nhiệm vụ có mức độ ưu tiên tối đa. Nó mô tả vấn đề chung. Có thể có cách tiếp cận đơn giản hơn, không tính đến các ưu tiên. Nó chọn nhiệm vụ được thêm vào cuối cùng bên cạnh thực thi thay vì thêm lần đầu tiên. Nói chung FixedThreadPool sử dụng chiến lược FIFO. Tôi có thể sử dụng chiến lược LIFO ví dụ không?
+1 có thể cung cấp một đoạn trích để cải thiện điều này. – Tudor
Điều này không thể làm việc vì 'newTaskFor' sẽ bọc ComparableFutureTask vào trong FutureTask, không thể so sánh được. Bạn cũng cần ghi đè lên hai phương thức 'newTaskFor'. – assylias
Xem [bài đăng này] (http://stackoverflow.com/a/16834473/829571) cho một ví dụ đơn giản. – assylias