20 Eylül 2023 Çarşamba

ThreadPoolExecutor Sınıfı ve PriorityBlockingQueue

Örnek
Şöyle yaparız
class PrioritySingleThreadPoolExecutor extends ThreadPoolExecutor{
  public CustomSingleThreadPoolExecutor() {
    super(1, 1, 1000, TimeUnit.SECONDS, new PriorityBlockingQueue<Runnable>());
  }

  @Override
  protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) {
    return new CustomFutureTask<>(runnable);
  }
}

// A comparable FutureTask
class CustomFutureTask<T> extends FutureTask<T> implements Comparable<CustomFutureTask<T>>{

  private final Task task;
  public CustomFutureTask(Runnable task) {
    super(task, null);
    this.task = (Task) task;
  }

  @Override
  public 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