java - JRE 如何为具有非有效最终局部变量的 lambda 体创建并发问题?

标签 java lambda concurrency java-8 final

我指的是我们经常在使用 lambda 时遇到的常见编译错误。

Variable used in lambda expression should be final or effectively final

它警告我们不要在 lambda 体内使用非明确赋值。我明白它说的是什么。

在 JLS,it明确表示

The restriction to effectively final variables prohibits access to dynamically-changing local variables, whose capture would likely introduce concurrency problems.

但我不太清楚它是如何产生问题的。

有人可以向我解释一下当我们试图违反这一点时,它会如何造成潜在的并发问题吗?

最佳答案

如果将变量捕获到 lambda 表达式中并将其传递给另一个线程,则对该变量的访问不会同步。这会导致并发问题。

关于java - JRE 如何为具有非有效最终局部变量的 lambda 体创建并发问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53442707/

相关文章:

java -> System.gc();此调用是否打开一个新线程?

mysql - 具有 MySql 并发 token 的 Entity Framework 6 不起作用

java - 尝试在控制台中运行 java 程序将给出无法找到或加载主类错误

java - "com.mysql.jdbc.JDBC4Connection"的实例过多

java - 使用java将图像大小MB减少到KB

c# - 静态类中的匿名方法是非静态的?如何调用它?

c++ - 如何在通用 lambda 中完美转发 `auto&&`?

java - Spring 启动。尝试打印非存储实体时没有代理

c# - 表达式体成员与 Lambda 表达式

java - Java中如何异步调用方法