2012-02-05 53 views
0

我想並行修改或克隆/變換預先排序的樹項目列表中的項目。這是列表遍歷從列表中的隨機項開始,並表示子樹遍歷(深度,父指針,後代大小和angleStart/angleEnd可用於徑向視圖)。並行化預訂樹

我的代碼目前的樣子:

items = ((AbsModel<SunburstContainer, SunburstItem>)model).listIterator(pHitItemIndex); 
items.next(); 
for (int i = pHitItemIndex + 1; i < endIndex && items.hasNext(); i++) { 
    final SunburstItem oldChild = items.next(); 
    final SunburstItem newChild = new SunburstItem(oldChild); 
    final float newStartAngle = 
    (oldChild.getAngleStart() - oldRoot.getAngleStart()) * angleFactor; 
    LOGWRAPPER.debug("angleStart: " + newStartAngle); 
    newChild.setAngleStart(newStartAngle); 
    float newEndAngle = 
    (oldChild.getAngleEnd() - oldChild.getAngleStart()) * angleFactor 
    + newChild.getAngleStart(); 
    LOGWRAPPER.debug("angleEnd: " + newEndAngle); 
    if (newEndAngle > PConstants.TWO_PI) { 
    newEndAngle = PConstants.TWO_PI; 
    } 
    newChild.setAngleEnd(newEndAngle); 
    newChild.setAngleCenter(newChild.getAngleStart() 
    + ((newChild.getAngleEnd() - newChild.getAngleStart())/2f)); 
    newChild.setIndexToParent(oldChild.getIndexToParent() - pHitItemIndex); 
    int newDepth = 0; 
    LOGWRAPPER.debug("child depth: " + oldChild.getDepth()); 
    LOGWRAPPER 
    .debug("parent depth: " + model.getItem(oldChild.getIndexToParent()).getDepth()); 
    final int parentDepth = model.getItem(oldChild.getIndexToParent()).getDepth(); 
    if ((parentDepth + 1) != oldChild.getDepth()) { 
    newDepth = oldDepthMax + 2; 
    } else { 
    newDepth = newItems.get(newChild.getIndexToParent()).getDepth() + 1; 
    } 
    if (newDepth > depthMax) { 
    depthMax = newDepth; 
    } 
    LOGWRAPPER.debug("newDepth: " + newDepth); 
    newChild.setDepth(newDepth); 
    newChild.update(mMappingMode, mBuffer); 
    newItems.add(newChild); 
} 

我想簡單地劃分(子)名單,即[pHitItemIndex + 1,endIndex的]成不同的部分,並提交給可調用的ExecutorService的。目前整個算法是在提交給ExecutorService的Callable中執行的,但我認爲我也可以簡單地將分區/ Callables提交給同一個ExecutorService。我想知道是否會獲得使用演員的優勢,例如使用Akka或使用ForkJoin框架。

回答

0

聽起來像一個問題,在斯卡拉並行集合可以幫助。

+0

謝謝,但第二個想到它似乎不是真正的可並行化,因爲我需要轉換的父項進行深度計算: - / – Johannes 2012-02-06 15:04:22