断点在Java中的lambda表达式中不起作用
我无法理解以下代码的作用:断点在Java中的lambda表达式中不起作用,java,multithreading,lambda,Java,Multithreading,Lambda,我无法理解以下代码的作用: public class Main { public static void main(String[] args) throws UnsupportedProtocolException, IOException { new Thread(() -> { PropertiesLoader loader = new PropertiesLoader(); loader.load(args)
public class Main {
public static void main(String[] args) throws UnsupportedProtocolException, IOException {
new Thread(() -> {
PropertiesLoader loader = new PropertiesLoader();
loader.load(args);
System.out.println(loader.getProperties());
});
}
}
我在main方法的所有行中都设置了断点,但只有以new Thread
开头的行中的断点被命中
但是,lambda表达式主体中没有断点被命中
另外,我不明白这段代码的作用。AFAIU,lambda表达式不返回任何值。因此,代码不向线程
构造函数提供任何参数
另外,我不明白为什么这里会有线程创建
您可以帮助我如何使用断点访问lambda表达式内部吗?lambda内部没有断点的原因是lambda从未运行过
lambda不带参数,返回类型为void,与函数接口
java.lang.Runnable
匹配(因为它有一个方法void run()
)。调用构造函数java.lang.Thread(java.lang.Runnable)
来构造一个新线程,但是该线程上从未调用过start()
,因此lambda永远不会运行。顺便说一句,这将只创建一个新线程,对吗?因此,你能解释一下为什么作者决定把动作放在一个线程中,而不是简单地按顺序执行吗?@Utku你是对的,只创建了一个新线程。由于代码不起作用,作者可能不知道他们在做什么,或者将线程传递给其他类来启动它,但我不确定,因为我不知道整个上下文。
() -> {
PropertiesLoader loader = new PropertiesLoader();
loader.load(args);
System.out.println(loader.getProperties());
}