我指的是我们经常在使用 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/