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

时间:2018-08-29 00:50:44

标签: java asynchronous lambda

我所知道的是:只能从lambda内部访问final或有效地final局部变量。 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表达式内部访问它们之前发生了什么,为什么不抛出Exception?我测试了代码,进行了编译,有趣的是,“返回”消息的打印时间早于“打印”。 这意味着我可以在方法返回后访问方法参数。

1 个答案:

答案 0 :(得分:1)

代码不会抛出异常,因为param1实际上是最终的。 Java Lambda与闭包相似。