java通过异步运行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 楼答案
代码不会抛出异常,因为param1实际上是final。Java lambda类似于闭包