2011-07-13 38 views
0

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

  1. 分配一个对象有N个线程和M个队列;
  2. 在队列m上安排作业n。
  3. 有一个指向第一个队列的指针 重复 a。如果最大线程数目前正在使用等待。 b。在当前队列中弹出一个作业 c。将指针移动一个队列(或从最后一个队列到第一个队列)

首先,这样做是否已经存在?其次,如果不是,我很担心写我自己的,因为我知道写我自己的线程池可能是危险的。任何人都可以指出我写自己的一些好例子。

+0

Doug Lea的fork-join会有帮助吗? –

+0

不幸的是我现在仅限于Java 6。看来fork-join只能在Java 7中使用。 – Jon

+0

M队列给你的那个队列不是什么? –

回答

1

最好的办法是创建自己的Queue循环队列。例如(在伪代码中):

class 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; 
} 

}

当然,这一点,如果你想阻止你需要补充的是你自己。

在这种情况下,您可能需要为每个可以通知父队列的值已添加的队列定制一个自定义队列。

+0

谢谢,这也是我的想法。 – Jon