Lambda表达式如何匹配方法?Java Thread构造方法调用疑问
Thread构造方法调用问题解答
为什么不会调用Thread(String name)构造方法?
你代码里的() -> {System.out.println("New runnable instance");}是Lambda表达式,它的类型是Runnable——因为完全匹配Runnable接口唯一的抽象方法run()(无参数、无返回值)。Java编译器会自动将这个Lambda适配为Runnable实例,所以传给Thread构造方法时,会精准匹配接收Runnable参数的Thread(Runnable runnable)构造方法。
而Thread(String name)构造方法需要String类型参数,Lambda和String属于完全不同的类型,编译器不会做跨类型自动转换,自然不会调用这个构造方法。
如何调用Thread(String name)构造方法?
有两种常见实现方式:
场景1:指定线程名+自定义执行逻辑
直接传入字符串作为线程名,同时重写Thread的run()方法定义执行逻辑:
Thread t = new Thread("MyCustomThread") { @Override public void run() { System.out.println("New runnable instance"); } };
场景2:同时指定Runnable逻辑和线程名
使用Thread的双参数构造方法Thread(Runnable runnable, String name),既传入Lambda(Runnable实例),又指定线程名:
Thread t = new Thread(() -> {System.out.println("New runnable instance");}, "MyCustomThread");
如果仅需创建指定名字的空逻辑线程,直接传字符串即可:
Thread t = new Thread("EmptyLogicThread");
内容的提问来源于stack exchange,提问作者A Hybris Dev
相关产品推荐
相关产品推荐

