1.继承thread类,重写run方法,缺点,java类和类中都是单继承,接口与接口多继承, 多实现,占据继承名额,无法继承其他类,底层也是实现runnable接口
2.实现rannable接口,实现run方法
2.1.通过匿名内部类生成rannable对象
2.2.rannable函数式接口,通过lambda表达式
3.实现callable接口,实现call方法,与rannable区别,通过开启一个线程,执行任务,可以拿到任务结果(调用get方法),需要new一个futuretask这个类,futuretask本质上也是实现rannable接口
4.利用线程池来创建线程
Executors.newFixedThreadPool