0

我不是 java 专家,我的问题有点抽象,我需要一个关于如何最好地实现我建议的架构和要求的建议。

我将描述我的要求:

我有一个管理器对象,它接收要处理的任务(持有一个任务队列),管理器应该在专用线程之间分配任务。每个线程都知道只执行特定类型的任务。

我创建了一个带有特定类型线程集合的主管理器类,当主管理器接收到一个新任务时,它会将任务推送到知道如何处理此任务的线程类对象的队列中(每个线程都有自己的任务队列)。

一个线程在处理完之前的任务后需要从他的队列中池化一个任务,但是如果队列是空的,他不应该使用资源并且需要在新的任务到达时被唤醒。

我虽然(可能不太好)是使用扩展计时器对象的线程并执行检查其队列的定时任务,但这不符合我在新任务到达之前释放资源的要求。

任何有关处理这些系统要求的最佳方法的建议都将不胜感激(我的问题不是家庭作业,而是我开发任务的一部分)。

编辑

(对@Alexander Torstling 的回答)我目前正在使用阻塞队列作为任务队列,我的问题不是并发问题,而是架构问题,我想在队列为空时释放资源并且我想被唤醒如果有新任务到达,如果我已经完成了一个任务的处理并且我有更多任务,我将继续处理下一个任务;

4

2 回答 2

2

看看BlockingQueue。为了避免创建太多线程,您可能需要考虑使用Executor,它可以为您管理线程池。

于 2012-08-02T13:24:27.853 回答
1

我会使用 ExecutorService。这包装了一个队列和一个线程池

ExecutorService service = Executors.newXxxx(); // new thread pool.


service.submit(new Runnable() {
    public void run() {
        process(task);
    }
});

这样,单个线程池可以处理任意数量的不同类型的任务(或者如果您愿意,也可以只处理一个)

于 2012-08-02T13:33:04.517 回答