1. 程式人生 > 其它 >扇出的模組多如何提高程式的執行效率?

扇出的模組多如何提高程式的執行效率?

有一個場景:

 

正常情況下:在ServiceA中呼叫ServiceB,ServiceC,ServiceD,將B,C,D的返回結果放入一個物件中。

使用多執行緒:每一個執行緒去執行一個方法,但是會有一個問題,將結果存入的時候,有可能沒有執行完。

即:

BService bService;
CService cService;

AServiceImpl{ 
 
  返回值1 = bService.add(XX)
  返回值2 = cService.add(XX)

  map.put("key1",返回值1)
  map.put("key2",返回值2)
  
}

使用了多執行緒,方法執行時非同步的,有可能 map.put("key1",返回值1)執行了,但返回值1 = bService.add(XX)還未執行,這樣就獲取不到值,就像Ajax一樣。

解決:使用實現Callable介面建立執行緒的方式,因為Callable建立執行緒,執行緒執行的時候是非同步的,獲取結果的時候是同步。

在call()方法裡面執行方法

public class MyCallable implements Callable<Object> {
    @Override
    public Object call() throws Exception {
        返回值1 = bService.add(xx);
        return 返回值1;
    } 
}

AServiceImpl.java

通過get()方法拿值

BService bService;
CService cService;

AServiceImpl{
返回值1
= futureTask.get(); map.put("key1",返回值1);
}

為什麼get是同步的但還是增加了效率?

雖然獲取結果是同步的,但方法執行的時候是非同步的,邏輯方法是同時執行的,不管怎麼樣比順序執行要快。