Şöyle yaparız
class PrioritySingleThreadPoolExecutor extends ThreadPoolExecutor{public CustomSingleThreadPoolExecutor() {super(1, 1, 1000, TimeUnit.SECONDS, new PriorityBlockingQueue<Runnable>());}@Overrideprotected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) {return new CustomFutureTask<>(runnable);}}// A comparable FutureTaskclass CustomFutureTask<T> extends FutureTask<T> implements Comparable<CustomFutureTask<T>>{private final Task task;public CustomFutureTask(Runnable task) {super(task, null);this.task = (Task) task;}@Overridepublic int compareTo(CustomFutureTask that) {return Integer.compare(this.task.getPriority(), that.task.getPriority());}}
- Burada kuyruk olarak PriorityBlockingQueue kullandığımız için kuyruğa eklenen nesnelerin Comparable arayüzünü gerçekleştirmesi ve FutureTask olması gerekir. Bunu sağlayan CustomFutureTask sınıfımız.
- CustomFutureTask sınıfını da ThreadPoolExecutor#newTaskFor() metodunu override ederek yaratıyoruz
Hiç yorum yok:
Yorum Gönder