2010-03-05 59 views
2

我現在有代碼,執行以下操作:怎麼辦FutureTasks和CachedThreadPool工作

private final static ExecutorService pool = Executors.newCachedThreadPool(); 
public void foo(){ 
    FutureTask<MyObject> first_task = createFutureTask(); 
    FutureTask<MyObject> second_task = createFutureTask(); 
    ... 

    pool.execute(first_task); 
    pool.execute(second_task); 
    .... 
    first_task.get(); 
    second_task.get(); 
    ... 
    System.out.println(time taken); 
} 

我遇到的問題是,我得到每個未來任務的打印出來做運算時,他們走的時候,因此,例如在控制檯上我會看到

first_task : 20000ms 
second_task : 18000ms 
... 

但總時間(System.out.println(time taken))遠遠大於任何未來的任務而採取的時間最長,所以在這個例子線的方法也需時約1分鐘(與first_task的20s相比)。

我的印象是,這些未來的任務並行運行,但從時間上來看,好像它們正在一個接一個地運行。我是否正確使用此API?

回答

2

您正在使用API​​,但請記住,每個任務都在單獨的線程中運行,而不是單獨的進程(因此不一定是並行)。

每個線程必須在單獨的CPU內核上運行才能同時執行。這是否可能取決於您的計算機,其當前負載以及JVM和OS如何能夠跨內核調度線程。

+0

如果你有多個核心 – basszero 2010-03-05 17:08:18