在Java8中,引入了lambda expressions。这个问题是关于何时执行并行lambda。
在Java8之前,Callable - 类是一次执行多个线程的一种方法。 Callables可以与Executor一起使用 - 要执行的类。假设我使用Fixed Thread Pool,使用3作为活动处理任务的数量。我们假设我有8个任务。固定线程池将启动前三个任务,并在完成后,启动下一个任务,直到完成所有8个任务。
如果我将我的任务实现为Java8-lambdas,会发生什么?全部8个会立刻开始吗?还是顺序?或者以任何聪明的方式?
特殊情况下,它们是否与调用者在同一个线程中运行(不使用Exeuctor)?就其性质而言,我猜lambda可以很容易地在另一个线程中执行。
答案 0 :(得分:11)
Runnable r = () -> System.out.println("hello");
相当于
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("hello")
}
};
并且它不会改变runnable的执行方式。如果将runnable提交给线程池,则线程池将执行它,无论您使用什么创建runnable:lambda,匿名类或顶级类。最后,你定义的是Runnable的一个实例,这是唯一重要的事情。