2015-06-19 15 views
0

我的程序有一個服務層,什麼是從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()後,這些運行併發或類似的東西。

我可以使用任何模式嗎?或者我應該在服務層上面執行併發層?我怎樣才能做到這一點?請給我一些提示,或者我該如何巧妙地做到這一點?

對不起我的英語... :-(

回答

0

首先,因爲你的方法的返回值,他們需要的是同步的,所以一個獨立的GETC()調用沒有意義在不同的線程,因爲你必須等待它完成並返回值,您需要重新設計整個服務層(以及客戶端調用它)以使其異步 - 通過回調等。

沒有模式AFAIK。As遠在應該的地方 - 絕對低於服務層,基本上把實際的實現移到getA(),getB(),getC()等等一些新的更低的級別,並確保這些方法是無狀態的或者線程安全的(同步等)然後所有y我們的服務器層應該通過線程池執行器來調用它們。顯然,如果您調用getA()和getB(),然後合併結果,則必須添加一些同步來等待兩者。查看1.5以來的java.util.concurrent包。