从new Thread说起

有这么个困惑,开启线程不都是继承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

上一篇:index


下一篇:第二篇