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

为什么lambdas中的变量必须是final或实际上是final?[副本]

柴兴修
2023-03-14

当我在写这段代码时,我得到了一个编译时错误,它说:“lambdas中的变量必须是final或实际上是final”。

public class test {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
         ExecutorService executorService = Executors.newFixedThreadPool(10);

         List<Future<String>> futureLists = new ArrayList<>();

         for (int i = 0; i < 20; i++) {
             futureLists.add(executorService.submit( () -> "Hello world" + i));
             }

         for (Future<String> itr:futureLists) {
             System.out.println(itr.get());
            }
       }
   }

共有1个答案

许永年
2023-03-14

它与多线程编程有关。

到目前为止,Java中的局部变量不受争用条件和可见性问题的影响,因为它们只能被执行声明它们的方法的线程访问。但是lambda可以从创建它的线程传递到另一个线程,因此,如果第二个线程计算的lambda被赋予变异局部变量的能力,这种免疫力就会丧失。-来源

 类似资料: