Java 基础:线程的三种创建方式
一、继承 Thread 类
定义一个类继承线程类 Thread
重写 run()方法
创建线程对象
调用线程对象的 start()方法创建线程
Thread 类的常用 API
setName(String name):给线程取名字
getName():获取线程的名字
public static Thread currentThread():获取当前线程对象,这个代码在哪个线程中就获取哪个线程对象
public static void sleep(long time):让当前线程休眠多少毫秒再继续执行
优点:
编码简单
缺点:
线程类已经继承 Thread 就无法继承其他类了,功能无法通过继承拓展(单继承的局限性)
二、实现 Runable 接口
定义一个线程任务类实现 Runable 接口
重写 run()方法
创建线程任务对象
把线程任务对象包装成线程对象
调用线程对象的 start()方法启动线程
复制代码
复制代码
优点:
避免了 Java 单继承的局限性
同一个任务对象可以被包装成多个线程对象
适合多个线程去共享同一个资源
实现解耦,线程任务代码可以被多个线程共享,线程任务代码和线程独立
线程池只能放入实现 Runable 和 Callable 接口的线程任务,不能直接放入继承 Thread 类的线程对象
缺点
编码复杂(其实还好啦)
匿名内部类的写法:
复制代码
三、实现 Callable 接口
定义一个线程任务类实现 Callable 接口,申明线程执行的结果类型
重写线程任务类的 call 方法,这个方法可以直接返回执行结果
创建一个 Callable 的线程任务对象
把线程任务对象包装成一个未来任务对象
把未来任务对象包装成线程对象
调用 start()方法启动线程
复制代码
复制代码
优点:
拥有所有 Runable 的优点
能直接得到线程执行的结果
缺点:
编码复杂
文章转载自:救苦救难韩天尊
评论