java - Java 8 中的 lambda 表达式是否执行多线程?

标签 java multithreading lambda java-8

在 Java8 中,lambda expressions被介绍。这个问题是关于何时执行并行 lambda 的。

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

如果我将我的任务实现为 Java8-lambdas,会发生什么?会同时启动所有 8 个吗?还是依次?或者以任何巧妙的方式?

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

最佳答案

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

相当于

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

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

关于java - Java 8 中的 lambda 表达式是否执行多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23495415/

相关文章:

java - 向玩家发送消息时出现问题

ruby-on-rails - 如何在使用 activerecords 和多线程时管理打开和关闭数据库连接

php - 在 PHP 中,exec 有时会默默地失败,当调用许多 exec 命令时,但稍后再次运行相同的命令会起作用

java - 使用流 API 将 List<T> 转换为 Map<T.Prop, List<T>>

c# - 如何在 lambda 表达式或 linq 中编写以下代码?

java - 从生成的 jar 文件中排除 META-INF/maven 文件夹

java - 我在控制台中没有输出 - java - Eclipse

java - Android - 获取一天开始和结束的 Unix 时间戳

python - 如何使用 ZeroMQ 从父进程中的多个线程收集数据,同时保持解决方案尽可能简单且可扩展?

javascript - QML:Lambda 函数意外运行