具有竞争队列的Java线程池
我想使用Java固定线程池的扩展。我有N组可运行的对象,我想与它们竞争资源。但是,我希望使用的线程总数保持不变。这里概述了我希望这项工作的方式具有竞争队列的Java线程池,java,multithreading,threadpool,Java,Multithreading,Threadpool,我想使用Java固定线程池的扩展。我有N组可运行的对象,我想与它们竞争资源。但是,我希望使用的线程总数保持不变。这里概述了我希望这项工作的方式 分配一个具有N个线程和M个队列的对象 在队列m上调度作业n 有一个指向第一个队列的指针 重复 A.如果当前使用的线程数达到最大值,请稍候。 B弹出当前队列上的作业 C将指针移到一个队列上(或从最后一个队列移到第一个队列) 首先,这样的事情已经存在了吗?第二,如果不是这样的话,我会对编写自己的线程感到紧张,因为我知道编写自己的线程池可能很危险。有人能给我举
首先,这样的事情已经存在了吗?第二,如果不是这样的话,我会对编写自己的线程感到紧张,因为我知道编写自己的线程池可能很危险。有人能给我举一些写我自己的好例子吗。你最好的选择可能是创建一个自己的队列实现,该队列在其他队列中循环。例如(在伪代码中): 循环类{ 队列[]; int电流=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;
}
CyclicQueue(整数大小){
队列=新队列[大小];
对于(int i=0;我需要Doug Lea的fork-join帮助吗?不幸的是,我现在只限于Java 6。fork-join似乎只存在于Java 7中。m队列给了你什么,而一个队列没有?我的想法是,我有不同类型的作业,我希望不同类型的作业竞争资源,但我希望相同类型的作业e不竞争资源。但我希望所有类型作业的线程总数保持不变。如果只有一个队列,它首先得到5个A作业,然后5个B作业,这些作业将在AAAAA BBBBB中执行,而我希望它们在ABABABABAB中执行,或者至少接近于该顺序。@Jon您也可以获得fork join框架这是一个为Java6编译的独立jar文件;请查找“PackageJSR166Y”。谢谢,这也是我的想法。