有这么个困惑,开启线程不都是继承Thread或重写runnable吗?为什么我是直接new的?这和new A(100)有什么区别?A(100)存的是变量啊为什么这里是'函数'?
new Thread(()->{
System.out.println(666);
}).start();
这里的本质是相当于new Thread(new Runnbale())
事实上,对于Thread确实是new。里面这个函数就有讲究了,等于new了个Runnable
最原始写法
//原始写法
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println(666);
}
}
//然后调用是这样的
new Thread(new MyRunnable()).start();
匿名内部类
但是上面的太麻烦 ,每次都要显示实现接口,单独创一个类就很累
就赋予new新功能,让它至少封装在一步
形式为 new A(){}
在{}里面重写方法
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(666);
}
}).start();
总结
三步走:自己实现接口 >> 匿名内部类 >> lamda