我不是Java专家,我的问题有点抽象,我需要一个关于如何最好地实现我建议的架构和要求的建议。
我将描述我的要求:
我有一个管理器对象,它接收要处理的任务(保存一个任务队列),管理器应该在专用线程之间分配任务。每个线程都知道只执行特定类型的任务。
我创建了一个Main Manager类,其中包含一组特定于类型的线程, 当主管理器收到一个新任务时,它会将一个任务推送到一个线程类对象的队列,该对象知道如何处理这个任务(每个线程都有自己的任务队列)。
线程需要在完成处理上一个任务时从队列中汇集任务,但如果队列为空,则他不应该使用资源,需要在新任务到达时唤醒。
我虽然(可能不太好)是使用扩展计时器对象的线程和定时检查其队列的任务,但这不符合我在新任务到达之前释放资源的要求。
任何关于处理这些系统要求的最佳方法的建议都将受到赞赏(我的问题不是作业,而是我开发任务的一部分)。
修改
(对@Alexander Torstling的回答)我正在使用阻塞队列作为任务队列,我的问题不是并发问题,而是架构,我想在队列为空时想要释放资源而我想成为如果新任务到达,可能会被事件唤醒,如果我已经完成了任务的处理,我有更多的任务,我将继续处理下一个任务;
答案 0 :(得分:2)
看看BlockingQueue。并且为了避免创建太多线程,您可能需要考虑使用Executor,它可以为您管理线程池。
答案 1 :(得分:1)
我会使用ExecutorService。这包装了一个队列和一个线程池
ExecutorService service = Executors.newXxxx(); // new thread pool.
service.submit(new Runnable() {
public void run() {
process(task);
}
});
通过这种方式,单个线程池可以处理任意数量的不同类型的任务(如果您愿意,可以只处理一个)