首先创建线程有四种种方式:
1.继承Thread类
2.实现Runnable接口(推荐)
TIPS:通过实现Runnable接口创建线程的方式实际上不是创建一个线程的对象。但是可以理解为创建一个线程的任务,将这个任务作为参数扔到Thread的构造函数中去。最后调用start方法来启动线程。
优点:其实达到了解耦的效果,避免了代码重构带来的困难。节省资源,实现了线程的复用性。
以上两种方式都是拿不到返回线程的参数
3.实现Callable接口,并且结合Future实现(底层还是通过Runnable)
实现Callable接口并且指定泛型(需要什么类型就返回什么类型)
4.通过JDK自带的线程池Executors来创建对象