本文主要是对java 多线程知识的总结,做个记录,温故知新。
多线程有三种实现方式,具体如下。
继承Thread类创建线程类
重写run方法,完成线程需要做的任务。
创建实例
调用start()启动线程
继承Thread,创建线程类
创建实例-启动线程
实现Runnable接口创建线程类
创建实现Runnable类,重写run方法,完成线程需要做的任务
创建Runnable实例,作为Thread类的Target
创建Thread实例,启动线程
创建实现Runnable类
创建Thread实例,启动线程
使用Callable和Future创建线程
创建实现Callable类,重写call方法,完成线程需要做的任务,并返回值
使用FutureTask包装Callable对象
使用FutureTask实例作为Thread类的Target
创建Thread实例,启动线程
调用FutureTask实例的get方法,获取返回值
创建实现Callable类,重写call
创建Thread实例,包装Callable,获取返回值
优缺点
使用Thread类方式,编写简单,不过因为继承了Thread类,不能再继承其他父类,带来了Java的单继承特性带来的局限
使用实现Runnable接口方式,只是实现了Runnable接口,还可以再继承其他父类,有利于程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。适合多个相同程序代码的线程去处理同个资源的情况,把线程同程序的代码、数据有效的分离,较好地体现了面向对象的设计思想。
使用实现Callable接口方式,只是实现了Callable接口,也可以再继承其他父类,除了具有Runnable接口的优点之外,而且还有返回值,很好的适用需要返回值的场景,不过编写比较复杂,得根据具体情况选择。
总结
因此一般推荐使用实现Runnable接口创建多线程。如果需要返回值的场景,则使用Callable接口的方式创建多线程。