Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JRE如何为具有非有效最终局部变量的lambda实体创建并发问题?_Java_Lambda_Concurrency_Java 8_Final - Fatal编程技术网

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

Java JRE如何为具有非有效最终局部变量的lambda实体创建并发问题?,java,lambda,concurrency,java-8,final,Java,Lambda,Concurrency,Java 8,Final,我指的是lambdas经常出现的这种常见编译错误 lambda表达式中使用的变量应为final或effective 决赛 它警告我们不要在lambda体内使用不确定的赋值。我明白上面说的 在JLS中,明确表示 对有效最终变量的限制禁止访问 动态更改局部变量,其捕获可能 引入并发问题 但是我不知道它是如何产生问题的 有人能给我解释一下任何情况吗?最好是用一个例子,说明当我们试图违反这一点时,它会如何产生潜在的并发问题?如果您将一个变量捕获到lambda表达式中并将其传递给另一个线程,那么对该变量的

我指的是lambdas经常出现的这种常见编译错误

lambda表达式中使用的变量应为final或effective 决赛

它警告我们不要在lambda体内使用不确定的赋值。我明白上面说的

在JLS中,明确表示

对有效最终变量的限制禁止访问 动态更改局部变量,其捕获可能 引入并发问题

但是我不知道它是如何产生问题的


有人能给我解释一下任何情况吗?最好是用一个例子,说明当我们试图违反这一点时,它会如何产生潜在的并发问题?

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

@supunwjerathne它没有更改,因此不需要同步。@supunwjerathne它们没有更改。禁止重新分配任务。这就是为什么我们有最终或有效的最终约束。@supungjerathne不是在身体之前,而是在身体内部和之后。是的。编译器不够聪明,无法理解它。放宽限制是可能的,但会使规则变得非常复杂。