我不是java专家,我的问题有点抽象,我需要一个关于如何最好地实现我建议的体系结构和需求的建议。
我将描述我的要求:
我有一个manager对象,它接收要处理的任务(包含一个任务队列),管理器应该在专用线程之间分配任务。每个线程只知道执行特定类型的任务。
我创建了一个具有特定类型线程集合的Main Manager类,当主管理器接收到一个新任务时,它将把一个任务推到知道如何处理该任务的线程类对象的队列中(每个线程都有自己的任务队列)。
当线程完成处理前一个任务时,需要从他的队列中汇集一个任务,但是如果队列是空的,则不应该使用资源,需要在新任务到达时被唤醒。
我的想法(可能不是很好)是使用扩展timer对象的线程,并使用一个定时任务来检查它的队列,但这不符合我在新任务到来之前释放资源的要求。
任何关于处理这些系统需求的最佳方法的建议都将受到赞赏(我的问题不是家庭作业,而是我开发任务的一部分)。
编辑
(对@Alexander Torstling的回答)我目前使用阻塞队列作为任务队列,我的问题不是并发问题,而是架构问题,当队列为空时,我想释放资源,如果新任务到来,我希望被事件唤醒,如果我已经处理完一个任务,并且我有更多的任务,我将继续处理下一个任务;
发布于 2012-08-02 13:24:27
看看BlockingQueue。为了避免创建过多的线程,您可能需要考虑使用执行者,它可以为您管理线程池。
发布于 2012-08-02 13:33:04
我会用ExecutorService。这封装了一个队列和一个线程池
ExecutorService service = Executors.newXxxx(); // new thread pool.
service.submit(new Runnable() {
public void run() {
process(task);
}
});这样,单个线程池就可以处理任意数量的不同类型的任务(如果您愿意的话,只处理一个)。
https://stackoverflow.com/questions/11778260
复制相似问题