构造新线程的开销很大,因为这涉及与操作系统的交互。如果你的程序创建了大量生命期很短的线程,那么就不应该把每个任务写成单独的线程,而应该使用线程池。

2.1 Callable与Future

Callable 与 Runnable 类似,都只有一个方法,方法都以异步方式执行。不同的是,Callable 是泛型接口,它的 call 方法有返回值。

  1. public interface Callabel<V> {
  2. V call() throws Exception;
  3. }

Future 保存异步计算的结果。