具有竞争队列的​​Java线程池

时间:2011-07-13 20:24:13

标签: java multithreading threadpool

我有一种情况,我想使用Java的固定线程池的扩展。我有N组可运行的对象,我想争夺资源。但是,我希望用于保持不变的线程总数。我想这个工作的方式在这里概述

  1. 使用N个线程和M个队列分配对象;
  2. 在队列m上安排作业n。
  3. 指向第一个队列 重复 一个。如果当前正在使用的最大线程数等待。 湾弹出当前队列中的作业 C。将指针移到一个队列上(或从最后一个队列移到第一个队列)
  4. 首先,这样的事情已经存在吗?第二,如果没有,我很担心写自己的,因为我知道写自己的线程池可能很危险。任何人都可以指出我自己编写的一些好例子。

1 个答案:

答案 0 :(得分:1)

您最好的选择可能是创建自己的队列实现,循环遍历其他队列。例如(在伪代码中):

类CyclicQueue {     队列队列[];     int current = 0;

CyclicQueue(int size) {
  queues = new Queue[size];

  for(int i=0; i<size; i++)
    queues[i] = new LinkedList<T>();
}

T get() {
  int i = current;
  T value;
  while( (value = queues[i].poll() == null) {
    i++;
    if(i == current)
      return null;
  }
  return value;
}

}

当然,有了这个,如果你想要阻止,你需要自己添加。

在这种情况下,您可能希望每个队列都有一个自定义队列,它可以通知父队列已添加值。