JRE 如何为具有非有效最终局部变量的 lambda 主体创建并发问题?
How JRE can create concurrency problems for lambda bodies with non effectively final local variables?
我指的是我们经常遇到的 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 表达式中并将其传递给另一个线程,那么对该变量的访问是不同步的。这会导致并发问题。
我指的是我们经常遇到的 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 表达式中并将其传递给另一个线程,那么对该变量的访问是不同步的。这会导致并发问题。