前言
- 在
Android
开发中,多线程的使用十分常见 - 今天,我将全面解析多线程中最常见的2种用法:继承
Thread
类 & 实现Runnable
接口
含丰富的实例讲解,切记不能错过。
Part 1:继承Thread类
目录
1. 简介
2. 使用讲解
2.1 使用步骤
2.2 具体使用
// 步骤1:创建线程类 (继承自Thread类)
class MyThread extends Thread{
// 步骤2:复写run(),内容 = 定义线程行为
@Override
public void run(){
... // 定义的线程行为
}
}
// 步骤3:创建线程对象,即 实例化线程类
MyThread mt=new MyThread(“线程名称”);
// 步骤4:通过 线程对象 控制线程的状态,如 运行、睡眠、挂起 / 停止
// 此处采用 start()开启线程
mt.start();
2.3 简便使用:匿名类
很多情况下,开发者会选择一种更加方便的方法去创建线程:匿名类
// 步骤1:采用匿名类,直接 创建 线程类的实例
new Thread(“线程名称”) {
// 步骤2:复写run(),内容 = 定义线程行为
@Override
public void run() {
// 步骤3:通过 线程对象 控制线程的状态,如 运行、睡眠、挂起 / 停止
}.start();
2.3 区别
2种方法本质相同,但是各有优劣势 & 不同的应用场景:
大家可根据自己的需求场景来选择具体的使用方法
为了让大家理解更加深刻,下面例子我都会采用 方法1 = 常规方式 来演示
3. 实例应用
实例1
- 应用场景:创建两个线程-实现两个相同的耗时任务
- 实例说明:实现2个窗口同时卖火车票;每个窗口卖100张,卖票速度都是1s/张
建议先下载Demo再看分析:Carson_Ho的Github地址:多线程之继承Thread类
- 具体实现
main_activity.xml
实例2
- 应用场景:创建两个线程-实现两个不同的耗时任务
- 实例说明:实现2个窗口同时卖火车票;每个窗口卖100张,但卖票速度不同:窗口1是1s/张,窗口2是3s/张
建议先下载Demo再看分析:Carson_Ho的Github地址:多线程之继承Thread类
- 具体实现
main_activity.xml
Part 2:实现Runnable接口
目录
1. 简介
2. 使用讲解
2.1 使用步骤
特别注意:
- Java
中真正能创建新线程的只有Thread
类对象
- 通过实现Runnable
的方式, 最终还是通过Thread
类对象来创建线程
所以对于 实现了
Runnable
接口的类,称为 线程辅助类 ;Thread
类才是真正的线程类
2.2 具体使用
// 步骤1:创建线程辅助类,实现Runnable接口
class MyThread implements Runnable{
….
@Override
// 步骤2:复写run(),定义线程行为
public void run(){
}
}
// 步骤3:创建线程辅助对象,即 实例化 线程辅助类
MyThread mt=new MyThread();
// 步骤4:创建线程对象,即 实例化线程类;线程类 = Thread类;
// 创建时通过Thread类的构造函数传入线程辅助类对象
// 原因:Runnable接口并没有任何对线程的支持,我们必须创建线程类(Thread类)的实例,从Thread类的一个实例内部运行
Thread td=new Thread(mt);
// 步骤5:通过 线程对象 控制线程的状态,如 运行、睡眠、挂起 / 停止
// 当调用start()方法时,线程对象会自动回调线程辅助类对象的run(),从而实现线程操作
td.start();
2.3 简便使用:匿名类
很多情况下,开发者会选择一种更加方便的方法去创建线程: 匿名类
// 步骤1:通过匿名类 直接 创建线程辅助对象,即 实例化 线程辅助类
Runnable mt = new Runnable() {
// 步骤2:复写run(),定义线程行为
@Override
public void run() {
}
};
// 步骤3:创建线程对象,即 实例化线程类;线程类 = Thread类;
Thread mt1 = new Thread(mt, "窗口1");
// 步骤4:通过 线程对象 控制线程的状态,如 运行、睡眠、挂起 / 停止
mt1.start();
2.3 区别
2种方法本质相同,但是各有优劣势 & 不同的应用场景:
大家可根据自己的需求场景来选择具体的使用方法
为了让大家理解更加深刻,下面例子我都会采用 方法1 = 常规方式 来演示
3. 实例应用
实例1
- 应用场景:创建两个线程-实现两个相同的耗时任务
- 实例说明:实现2个窗口同时卖火车票;每个窗口卖100张,卖票速度都是1s/张
建议先下载Demo再看分析:Carson_Ho的Github地址:多线程之继承Thread类
- 具体实现
main_activity.xml
实例2
- 应用场景:创建两个线程-实现两个不同的耗时任务
- 实例说明:实现2个窗口同时卖火车票;每个窗口卖100张,但卖票速度不同:窗口1是1s/张,窗口2是3s/张
建议先下载Demo再看分析:Carson_Ho的Github地址:多线程之继承Thread类
具体实现
main_activity.xml
实例3
- 应用场景:创建两个线程-实现一个耗时任务
- 实例说明:实现2个窗口同时卖火车票;两个窗口一共卖100张,卖票速度均为1s/张
建议先下载Demo再看分析:Carson_Ho的Github地址:多线程之继承Thread类
具体实现
main_activity.xml
Part 3:对比
- 继承
Thread
类和实现Runnable
接口是实现多线程最常用的2种方法 - 二者对比如下:
总结
- 本文主要对多线程中的基础用法:实现
Runnable
& 继承Thread
的用法进行了全面介绍 -
- 作者 :张艺峰
- 原文链接:https://blog.csdn.net/haizixm/article/details/80700136
-