断点在Java

时间:2016-05-07 22:31:47

标签: java multithreading lambda

我无法理解以下代码的作用:

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());
        });
    }
}

我在主方法的所有行中都设置了断点,但只有以new Thread开头的行中的断点才会被击中。

然而,lambda表达式中没有断点被击中。

另外,我不明白这段代码的作用。 AFAIU,lambda表达式不返回任何值。因此,代码不向Thread构造函数提供任何参数。

另外,我不明白为什么会在这里创建一个线程。

你能帮我解决一下如何使用断点到达lambda表达式的内部吗?

1 个答案:

答案 0 :(得分:3)

在lambda中没有到达断点的原因是因为lambda永远不会运行。

() -> {
        PropertiesLoader loader = new PropertiesLoader();
        loader.load(args);
        System.out.println(loader.getProperties());
    }

是一个不带参数且具有void返回类型的lambda,它匹配函数接口java.lang.Runnable(因为它有一个方法void run())。调用构造函数java.lang.Thread(java.lang.Runnable)来构造一个新线程,但永远不会在该线程上调用start(),因此lambda永远不会运行。