创建线程的三种方式及区别

一:创建线程的三种方式:

1.继承Thread类

2.实现Runnable接口

3.使用Callable接口

二:创建线程的具体实现步骤:

1.继承Thread类

(1).先继承 Thread类,并且重写run方法

(2).创建对象(线程对象)

(3).调用start方法,来启动线程任务

2.实现Runnable接口

(1).实现Runnable接口,并重写 run方法

(2). 创建该类的实例对象,将该对象作为构造器参数传入Thread类实例对象,这个对象才是真正的线程对象;

(3).调用线程对象的start()方法启动该线程;

3.实现Callable接口

(1).创建Callable接口实现类,并实现call()方法,该方法将作为线程执行体,且该方法有返回值,再创建Callable实现类的实例;

(2).使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值;

3).使用FutureTask对象作为Thread对象的target创建并启动新线程,调用FutureTask对象的get()方法来获得子线程执行结束后的返回值

二.创建线程的三种方式的对比 1.实现Runnable或Callable接口比继承Thread类的优势

(1)Runnable或Callable接口适合多个线程进行资源共享

(2)java中单一继承,但是多接口实现,提高扩展性

(3)增加程序的健壮性,代码和数据独立

(4)线程池只能放入Runable或Callable接口实现类,不能直接放入继承Thread的类

2.Callable和Runnable之间的区别

(1) Callable重写的是call()方法,Runnable重写的方法是run()方法

(2) call()方法执行后可以有返回值,run()方法没有返回值

(3) call()方法可以抛出异常,run()方法不可以

(4) 运行Callable任务可以拿到一个Future对象,表示异步计算的结果 。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果

经验分享 程序员 微信小程序 职场和发展