文章目录
一、多线程
1、继承Thread类(方式一)
1)实现多线程
继承Thread类
重写run()方法
创建线程对象
调用start()方法启动
调用run方法会当成普通方法执行,只有调用start方法才是启动一个新的线程执行
2)优缺点
- 优点
编码简单
- 缺点
是单继承,线程类继承Thread后,不能继承其他类,不便于扩展
2、实现Runnable接口(方式二)
1)实现多线程
定义一个线程任务类MyRunnable实现Runnable接口,重写run()方法
创建MyRunnable对象
把MyRunnable任务对象交给Thread线程对象处理
调用线程对象的start()方法启动线程
2)实现多线程(匿名内部类方式)
创建Runnable的匿名内部类对象
交给Thread处理
调用线程对象的start()启动线程
3)优缺点
- 优点
实现了Runnale接口,可以继续继承和实现
- 缺点
线程有执行结果是不能直接返回
3、实现Callable、FutureTask接口(方式三)
1)实现多线程
创建Callable接口实现类,重写call()方法,封装
用FutureTask把Callable对象封装成线程任务对象
线程任务对象交给Thread处理,调用start()方法启动线程,执行任务
执行完毕后,通过FutureTask的get方法去获取任务执行的结果
2)优缺点
- 优点
线程任务类只是实现接口,可以继续继承类和实现接口,扩展性强。
可以在线程执行完毕后去获取线程执行的结果。
- 缺点
编码复杂
方法名 | 解释 |
---|---|
public FutureTask<>(Callable call) |
把Callable对象封装成FutureTask对象 |
public V get() throws Exception |
获取线程执行call方法返回的结果 |
4、Thread线程
1)Thread的构造器
构造器 | 解释 |
---|---|