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

Java8中的lambda表达式是多线程执行的吗?,java,multithreading,lambda,java-8,Java,Multithreading,Lambda,Java 8,在Java8中,引入了。这个问题是关于何时执行并行lambda的 在Java8之前,-类是一次执行多个线程的一种方法。Callables可以与要执行的类一起使用。假设我使用a,使用3作为活动处理任务的数量。假设我有8项任务。固定线程池将启动前三个任务,当其中一个任务完成时,将启动下一个任务,直到所有8个任务都完成 如果我将我的任务实现为java8lambdas,会发生什么?所有8个会立即启动吗?还是按顺序?或者以任何聪明的方式 特别是,它们是否与调用方在同一线程中运行(不使用exuctor)?就

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

在Java8之前,-类是一次执行多个线程的一种方法。Callables可以与要执行的类一起使用。假设我使用a,使用3作为活动处理任务的数量。假设我有8项任务。固定线程池将启动前三个任务,当其中一个任务完成时,将启动下一个任务,直到所有8个任务都完成

如果我将我的任务实现为java8lambdas,会发生什么?所有8个会立即启动吗?还是按顺序?或者以任何聪明的方式

特别是,它们是否与调用方在同一线程中运行(不使用exuctor)?就其性质而言,我猜lambdas可以在另一个线程中轻松执行

Runnable r = () -> System.out.println("hello");
相当于

Runnable r = new Runnable() {
    @Override
    public void run() {
        System.out.println("hello")
    }
};

它不会改变runnable的执行方式。如果您将runnable提交到线程池,那么线程池将执行它,无论您使用什么方法创建runnable:lambda、匿名类或顶级类。最后,您定义的是Runnable的实例,这是唯一重要的事情。

Lambdas只是编写相同内容的另一种方式。它只是一段可以运行的代码,就像您要传递的可运行代码一样。我不影响他们的执行方式。也许我只是不理解你的问题。可调用函数被赋予了一个执行器(我可以控制线程数),而lambda表达式在被调用后立即被执行(?)。我在问自己,lambda表达式在引用多线程时是如何运行的。而lambda表达式在被调用时就被执行——并且它们被调用的时间与任何其他
可调用的
都是一样的(它们不是在被创建时就被执行).你把Lambdas和“能给你的樱桃增加更多汁液的东西”混淆了。嗯,他们没有。它们是编译时或代码级的改进,而不是字节码级的改进。有或没有Lambdas的代码编译为相同的字节码(几乎相同),函数的方式相同。所以,如果你知道基本知识,就不用担心了。可调用函数一被调用就被执行。因此lambda不会在自己的线程中执行;还是只有我把它交给遗嘱执行人?我曾希望通过使用lambdas获得多线程作为礼物。@MarcusSchultö您可以将lambdas视为语法糖,一种替代方法,用我们过去编写的大量开销替换代码,正如JBNizet在这里所示。它们的使用方式没有区别。@MarcusSchultö关于多线程,您免费获得的是并行流:
hugeList.parallelStream().map(s->s.toUpperCase()).collect(toList())
例如,将使用多线程使所有字符串都大写。但这并不是严格意义上的兰博达斯。lambda只是创建新流API所使用的函数、谓词、使用者等实例的一种很好的新方法。