-
继承Thread类,重写run方法(其实Thread类本身也实现了Runnable接口)
- 每次创建一个新的线程,都要新建一个Thread子类的对象
- 启动线程,new Thread子类().start()
- 创建线程实际调用的是父类Thread空参的构造器
-
实现Runnable接口,重写run方法
- 不论创建多少个线程,只需要创建一个Runnable接口实现类的对象
- 启动线程,new Thread(Runnable接口实现类的对象).start() - 创建线程调用的是Thread类Runable类型参数的构造器
-
实现Callable接口,重写call方法(有返回值)
- 自定义类实现Callable接口时,必须指定泛型,该泛型即返回值的类型
- 每次创建一个新的线程,都要创建一个新的Callable接口的实现类、如何启动线程?
- 创建一个Callable接口的实现类的对象
- 创建一个FutureTask对象,传入Callable类型的参数public FutureTask(Callable callable){……}
- 调用Thread类重载的参数为Runnable的构造器创建Thread对象 将FutureTask作为参数传递,调用FutureTask类的get()方法
-
使用线程池(有返回值)
- 使用Executor封装好的四中线程池创建方式