当前位置: 首页 > 知识库问答 >
问题:

为什么在lambda表达式中使用的变量应该是final或实际上是final

利永年
2023-03-14

这个问题以前在这里问过
我关于为什么在这里回答的问题
但我对这个答案有一些怀疑。提供的答案提到-

为了降低bug的风险,他们决定确保捕获的变量永远不会变异。我对它会导致并发问题的说法感到困惑。

我在Baeldung上读了一篇关于并发问题的文章,但我仍然对它如何导致并发问题感到有点困惑,有人能用一个例子来帮助我吗?提前谢了。

共有1个答案

乐正明辉
2023-03-14

当创建lambda表达式的实例时,它所引用的封闭作用域中的任何变量都将复制到该实例中。现在,假设允许修改它,现在您正在处理副本中的一个陈旧值。另一方面,假设副本在lambda中被修改,但封闭作用域中的值仍然没有更新,从而留下不一致性。因此,为了防止这种情况发生,语言设计者施加了这种限制。这可能也会让他们的生活更轻松。可以在这里找到匿名内部类的相关答案。

另一点是,您可以到处传递lambda表达式,如果它被转义并由不同的线程执行,而当前线程正在更新相同的局部变量,那么也会出现一些并发问题。

 类似资料: