哪种并行模式对此有用?

时间:2015-06-19 15:16:41

标签: java

我的程序有一个服务层,从dao到视图提供什么(业务)数据。像这样:

package service;

public class DetailsService implements IDetailsService {
    public A getA(...) { /* use dao objects */ }
    public B getB(...);
    public C getC(...) {
        // do something
        return getA() "+" getB();
    }
    public D getD(...);
}

在一些前端课程中我们称之为getA()和getD()之后,在其他类中我们调用getC()等。

现在,我想用并发行为加速应用程序(例如,getC()使用ExecutorService执行getA()和getB()任务)。我希望如果前端类调用getA()并在getD()之后,它们会运行并发或类似的东西。

我可以使用任何模式吗?或者我应该在服务层之上进行并发层?我怎样才能做到这一点?请给我一些提示,或者我怎样才能巧妙地做到这一点?

抱歉我的英文...... :-(

1 个答案:

答案 0 :(得分:0)

首先,由于您的方法返回值,它们需要是同步的,因此独立的getC()调用在另一个线程上没有意义,因为您必须等待它完成并返回该值。您需要重新设计整个服务层(以及调用它的客户端)以使其异步 - 通过回调等。

AFAIK没有图案。到目前为止,它应该在哪里 - 绝对低于服务层。基本上将实际实现:getA(),getB(),getC()等移动到一些新的较低级别,并确保这些方法是无状态或线程安全的(同步等)然后你所有的服务器层应该做的是通过线程池执行器调用它们。显然,如果你调用getA()和getB(),然后组合结果,你必须添加一些同步来等待两者。看看自1.5以来可用的java.util.concurrent包。