2010-03-05 21 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