"lambda 表达(匿名内部类) 会在另一个线程中执行"

2021-01-14 10:18:23 +08:00
 noble4cc

怎么理解这句话?看到网上资料很多都这么说,当然可能是互相抄的

lambda 表达式是独立线程执行?还是说有的场景下 lambda 是不在定义的线程调用执行?

3840 次点击
所在节点    Java
24 条回复
XDJI
2021-01-14 10:24:03 +08:00
说的是并行流? lambda 只是一种写法
zhzy0077
2021-01-14 10:25:44 +08:00
import java.lang.*;
public class Main {
public static void main(String[] args) {
run(() -> System.out.println("hello world"));
}

static void run(Runnable r) {
r.run();
}
}

这肯定是在同一个线程中执行的,这句话应该是有上下文的吧
chendy
2021-01-14 10:27:12 +08:00
parallel 的 stream ?
ExecutorService.submit ?
noble4cc
2021-01-14 10:38:38 +08:00
@XDJI 不是并行流,
@zhzy0077
可以 Google 下 Variable used in lambda expression should be final or effectively final
misaka19000
2021-01-14 10:40:37 +08:00
看一下汇编就知道了
chendy
2021-01-14 10:59:54 +08:00
@noble4cc 所以标题这句话的上下文和原文是啥呢?
至少不应该是“会”在另一个线程中执行,应该是“可以”在另一个线程中执行吧
wucao219101
2021-01-14 11:01:55 +08:00
毫无逻辑的一句话,Lambda 表达式跟线程没有一点关系,lambda 表达式只是一种语法。

如果是用 Lambda 实现启动 Runnable 线程,确实是会在另一个线程中执行,但是总不能说是"lambda 表达(匿名内部类) 会在另一个线程中执行"吧?
zoharSoul
2021-01-14 11:02:29 +08:00
没有这种说法
pursuer
2021-01-14 11:05:51 +08:00
lambda"可能"会在另一个线程中执行,就像回调函数一样
noble4cc
2021-01-14 11:09:37 +08:00
@wucao219101 其实我也这么觉得🤦‍♀️,作者可能想表达 Lambda 可能在不同的线程中执行
lululau
2021-01-14 11:32:29 +08:00
你的问题其实和线程没关系,和 lambda 也没关系:

“你不能在匿名内部类中修改外部局部变量,因为 Java 对于匿名内部类传递变量的实现是基于构造器传参的,也就是说如果允许你在匿名内部类中修改值,你修改的是匿名内部类中的外部局部变量副本,最终并不会对外部类产生效果,因为已经是二个变量了。
这样就会让程序员产生困扰,原以为修改会生效,事实上却并不会,所以 Java 就禁止在匿名内部类中修改外部局部变量。”
HolmLoh
2021-01-14 11:48:02 +08:00
lambda 会在别的线程中运行
但不是一定会再憋的线程中运行
举个例子
```
Runnable runnable = () -> {};
runnable.run();
```
```
Runnable runnable = () -> {};
new Thread(runnable).start();
```
jptx
2021-01-14 13:20:37 +08:00


我找到你说的那篇文章了,下面评论区早就吐槽过了
freebird1994
2021-01-14 13:46:53 +08:00
可能会在另外的线程执行吧,parallel 。用 lambda 最烦的就是这点
young1lin
2021-01-14 13:54:26 +08:00
@chendy 我觉得也可能说的是这个,看看《 Java 8 实战》就知道了。不过这是 Stream 相关的,不是 Lambda
trevis761923
2021-01-14 14:07:14 +08:00
并行流会另外开线程.
noble4cc
2021-01-14 15:04:21 +08:00
@lululau 这个确实知道,但是网上的文章都是说会在多个线程执行,而且一搜一大片都是这么说的。。。所以感觉有些奇怪
vinceall
2021-01-14 15:37:39 +08:00
自己做实验就知道了,应该不会
vinceall
2021-01-14 15:38:03 +08:00
@noble4cc 网上的东西。。。连错别字都一样,没营养
noble4cc
2021-01-14 16:23:23 +08:00
@vinceall 确实做过实验了,和线程没什么关系。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744789

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX