Java8中的lambda表达式是否执行多线程?

时间:2014-05-06 12:58:17

标签: java multithreading lambda java-8

在Java8中,引入了lambda expressions。这个问题是关于何时执行并行lambda。

在Java8之前,Callable - 类是一次执行多个线程的一种方法。 Callables可以与Executor一起使用 - 要执行的类。假设我使用Fixed Thread Pool,使用3作为活动处理任务的数量。我们假设我有8个任务。固定线程池将启动前三个任务,并在完成后,启动下一个任务,直到完成所有8个任务。

如果我将我的任务实现为Java8-lambdas,会发生什么?全部8个会立刻开始吗?还是顺序?或者以任何聪明的方式?

特殊情况下,它们是否与调用者在同一个线程中运行(不使用Exeuctor)?就其性质而言,我猜lambda可以很容易地在另一个线程中执行。

1 个答案:

答案 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的一个实例,这是唯一重要的事情。