从异步运行的 lambda 访问方法参数

我所知道的:只能final或有效final地从 lambda 内部访问局部变量。static变量也可以访问,也可以修改。


我不知道的是:为什么这段代码不抛出异常?


public static String sampleFunction(String param1, int param2) {

    new Thread(() -> { 

        try { Thread.sleep(100000); } catch (InterruptedException e) { }

        // accessing method parameter here...

        String _param1 = param1;

        System.out.println(_param1);

    }).start();


   return "";

}


public static void Main(String[] arguments) {

    sampleFunction("to print", 9);

    System.out.println("function returned");

}

因此,考虑到参数在返回时被释放,这发生在尝试从异步运行的lambda表达式内部访问它们之前,为什么不 throw Exception?我测试了代码,编译并有趣的是“返回”消息比“打印”早。这意味着我可以在方法返回后访问方法参数。


噜噜哒
浏览 135回答 1
1回答

拉丁的传说

代码不会抛出异常,因为 param1 实际上是最终的。Java Lambda 类似于闭包。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java