lambda表达式 这句代码是什么意思呢?
new Thread(() -> {
            try {
                this.bind();
            } catch (Exception e) {
                log.info("TCP服务启动出错:{}", e.getMessage());
                e.printStackTrace();
            }
        }, this.getName()).start();

这个() -> 是什么意思哦 如果要改写 怎么改。网上说()相当与参数 -> 后面是方法或者表达式

 new Thread(
 this.bind(),this.getName()
 ).start();

这样写好像不对哦

2个回答

new Thread( () -> { }, this.getName() ).start(); 这段代码可以这样看 , 首先是调用了Thread的构造函数去实例化对象 ,然后调用它的 start 方法.
这个构造函数有两个参数 , 其中一个必须是函数式接口 , 去Thread类中查找只能找到 Thread( Runnable , String) 这个构造函数满足要求.
然后第一个参数是Runnable对象 , 他采用的是 lambda表达式来作为参数传递 , 而不是使用匿名内部类或者Runnable的实现类对象作为参数
因为Runnable接口是一个函数式接口 , 只有一个 run() 方法且没有参数 , 所以使用 () ->{ run方法具体实现代码 } lambda表达式 , 相当于你创建了一个Runnable对象

qq_38167579
农夫丶果园 回复城里俊男多: 首先 Runnable接口就是一个函数式接口 , 函数式接口都可以通过lambda表达式来达到行为参数化的目的 ; 意思就是说本来你是需要一个Runnable 类型作为参数 , 但是你不想新建一个类去实现Runnable接口 , 或者使用匿名内部类去 new 一个Runnable的实现 , 那么lambda表达式可以帮你解决这些麻烦 . 而且函数式接口只能有一个抽象方法 (不算默认方法) , 所以你调用的就是这个方法 ; 这个是java8 开始支持的 , 很值得去学习一下 , 不知道我有没有讲清楚
一年多之前 回复
qq_39658059
城里俊男多 谢谢,那这个() -> { }就相当于是一个 函数式接口参数调用了里面的java void run() 方法 是这样理解吧。
一年多之前 回复

就是参数列表啊,new thread不需要传入参数所以()是对的。。。

qq_39658059
城里俊男多 try { this.bind(); log.info("jt808-TCP启动"+this.port); } catch (Exception e) { log.info("jt808-TCP服务启动出错:{}", e.getMessage()); e.printStackTrace(); } new Thread(() -> { }, this.getName()).start();这样写效果是一样的没区别啊。。。
一年多之前 回复
qq_39658059
城里俊男多 `java
一年多之前 回复
qq_39658059
城里俊男多 ()是viod参数列表,那这个{}里面的this.bind();相当于是没有意义的吧,但是这个this.getName();不是作为thread启动的参数吗
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问