java - 在构造函数中使用 lambda 时的“this”引用转义

标签 java java-8 concurrency

引用这个问题-

How does `this` reference to an outer class escape through publishing inner class instance?

如果我们用 lambda 或方法引用替换匿名类,这段代码为什么以及如何表现?

public class ThisEscape {
    public ThisEscape(EventSource source) {
         source.registerListener(e -> doSomething(e));
    }
}

最佳答案

从技术上讲,创建匿名内部类或使用 lambda 并没有太大区别。 Lambda 不仅仅是语法糖果,它使 Java 一直能够做的事情更加突出、易于访问和不易出错。那就是您的代码受制于 the question you referred to 中描述的相同竞争条件。及其答案。

使用给定的代码构造,您无法保证在调用 doSomething 之前正确创建了 ThisEscape 的实例。

阅读 this answer 中链接的 javaspecialists.eu 时事通讯了解在什么情况下可能会出现问题。

关于java - 在构造函数中使用 lambda 时的“this”引用转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62625880/

相关文章:

java - java中的方法引用

java - 使用 java.util.stream 将列选择到记录列表中

java - 如何在以泛型数组为参数的泛型方法中实现 compareTo?

python - multiprocessing.Pool : When to use apply, apply_async 或映射?

concurrency - 单子(monad)和 Actor

java - 这是最小化绑定(bind)失效的有效方法吗?

java - 使用正则表达式在java中标记字符串

java - 无法读取 try catch 中的变量

java - 创建调度程序时如何避免无限循环

java - Spring 应用程序不考虑 spring.schemas