首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java,系统架构,正确的实现

Java,系统架构,正确的实现
EN

Stack Overflow用户
提问于 2012-08-02 13:18:16
回答 2查看 136关注 0票数 0

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

我将描述我的要求:

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

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

当线程完成处理前一个任务时,需要从他的队列中汇集一个任务,但是如果队列是空的,则不应该使用资源,需要在新任务到达时被唤醒。

我的想法(可能不是很好)是使用扩展timer对象的线程,并使用一个定时任务来检查它的队列,但这不符合我在新任务到来之前释放资源的要求。

任何关于处理这些系统需求的最佳方法的建议都将受到赞赏(我的问题不是家庭作业,而是我开发任务的一部分)。

编辑

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-02 13:24:27

看看BlockingQueue。为了避免创建过多的线程,您可能需要考虑使用执行者,它可以为您管理线程池。

票数 2
EN

Stack Overflow用户

发布于 2012-08-02 13:33:04

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

代码语言:javascript
复制
ExecutorService service = Executors.newXxxx(); // new thread pool.


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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11778260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档