多线程有几种实现方式?有什么区别?
多线程有几种实现方式?有什么区别?
多线程的创建方式有常见的4种
1. 继承Thread类
线程类的创建:创建新类extends Thread类重写run方法
run方法: run方法没有返回值,不能声明抛出异常
线程启动:创建Thread类的子类对象,就是线程对象,通过子类对象调用start方法启动线程运行。
资源共享:不能资源共享
2. 实现Runnable接口
线程类的创建:创建新类implements Runnable接口重写run方法
run方法: run方法没有返回值,不能声明抛出异常
线程启动:创建实现Runnable接口的子类对象【目标对象】,创建Thread类的对象,将实现Runnable接口的子类对象【目标对象】作为Thread类的构造方法的参数传递给Thread类的对象,从而创建出线程对象【Thread类的对象】,Thread类的对象调用start方法启动线程运行
资源共享:能资源共享
3. Callable和Future接口
线程类的创建:创建一个新类implements Callable接口,实现Callable接口时候注意设置泛型类型,重写call方法
call方法:call方法有返回值,返回值类型是实现Callable接口时的泛型类型,call方法的返回值可以通过Future接口提供的get方法得到,可以声明抛出异常
线程启动:创建 Callable接口的子类对象【目标对象】,通过Future接口的子类FutureTask将目标对象封装成Runnable接口类型,通过Thread类的构造方法,关联Future接口的子类FutureTask封装成Runnable接口的子类对象,通过Thread类的构造方法将封装成Runnable接口的子类对象转成Thread类的对象【线程对象】,用Thread类的对象【线程对象】调用start方法启动线程运行。
资源共享:能资源共享,适用于异步编程的情况。
4. 线程池技术【使用的频率较少,所以暂时不考虑】