没有合适的资源?快使用搜索试试~ 我知道了~
Java多线程-创建多线程的基本方式二:实现Runnable接口
0 下载量 115 浏览量
2024-01-25
11:38:03
上传
评论
收藏 1.12MB PDF 举报
温馨提示
试读
24页
Java多线程--创建多线程的基本方式二:实现Runnable接口
资源推荐
资源详情
资源评论
一、方式2:实现Runnable接口
(1)步骤
(2)举例
1、案例1
2、案例2
3、案例3
(3)代码及总结
二、练习
(1)方式一、继承Thread类
1、方法1:继承Thread类--标准写法
2、方法2:继承Thread类--变形写法
(2)方式二、实现Runnable接口
1、方法3:实现Runnable接口--标准写法
2、方法4:实现Runnable接口--变形写法
一、方式2:实现Runnable接口
(1)步骤
上一节说明了创建多线程的基本方式一:继承Thread类,链接:
https://blog.csdn.net/m0_55746113/article/details/135708814?spm=1001.2014.3001.5502
但是Java有 单继承 的限制,若此时让一个类继承于Thread之后,还想有其他的继承关系,以便拓展
功能,那就非常难受了,因为这个类没法再继承其他的类了。这就导致了一定程度上的局限性。
当我们无法继承Thread类时,该如何做呢?
在核心类库中提供了 Runnable 接口,我们可以实现Runnable接口,重写 run() 方法,然后再通过
Thread类的对象代理启动和执行我们的线程体run()方法。
看一下API:
创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以
分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。
比如:计算一下比指定数大的质数有哪些?
🌱
代码
【步骤】
1. 定义 Runnable 接口的实现类,并重写该接口的 run() 方法,该 run() 方法的方法体同样是该
线程的线程执行体。
2. 创建 Runnable 实现类的实例,并以此实例作为 Thread 的 target 参数来创建Thread对象,
该Thread对象才是真正的线程对象。
3. 调用线程对象的 start() 方法,启动线程。调用Runnable接口实现类的 run 方法。
举例代码如下:
测试类:
class PrimeRun implements Runnable { //1、声明类PrimeRun实现Runnable接口
long minPrime;
PrimeRun(long minPrime) { //通过构造器赋值指定数
this.minPrime = minPrime;
}
public void run() { //2、计算比指定数大的质数都有哪些(逻辑代码)
// compute primes larger than minPrime
. . .
}
}
//-------------------------------------------------------------------------------
-
//然后,下列代码会创建并启动一个线程:
PrimeRun p = new PrimeRun(143); //3、创建实现类的对象
new Thread(p).start(); //4、把对象作为参数传递到Thread类的构造器中,造一个线程的对
象,调用start()方法
package com.atguigu.thread;
public class MyRunnable implements Runnable {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
}
package com.atguigu.thread;
public class TestMyRunnable {
☕
注意
通过实现 Runnable 接口,使得该类有了多线程类的特征。
所有的分线程要执行的代码都在 run 方法里面。
在启动的多线程的时候,需要先通过 Thread 类的构造方法 Thread(Runnable target) 构造
出对象,然后调用 Thread 对象的 start() 方法来运行多线程代码。
实际上,所有的多线程代码都是通过运行Thread的start()方法来运行的。因此,不管是继承
Thread类还是实现Runnable接口来实现多线程,最终还是通过Thread的对象的API来控制线
程的,熟悉Thread类的API是进行多线程编程的基础。
说明: Runnable 对象仅仅作为Thread对象的target, Runnable实现类 里包含的 run() 方法仅作
为线程执行体。
而实际的线程对象依然是Thread实例,只是该Thread线程负责执行其target的run()方法。
(2)举例
1、案例1
🌋
题目描述
创建分线程遍历100以内的偶数。
🍰
分析
1、创建一个实现Runnable接口的类(实现类)。
public static void main(String[] args) {
//创建自定义类对象 线程任务对象
MyRunnable mr = new MyRunnable();
//创建线程对象
Thread t = new Thread(mr, "长江");
t.start();
for (int i = 0; i < 20; i++) {
System.out.println("黄河 " + i);
}
}
}
2、实现接口中的抽象方法run()方法 -->将此线程要执行的操作,声明在此方法体中。(对于抽象方
法的重写一般叫做实现)
在Runnale里面有一个抽象方法 run() ,如下:
此时在实现类 EvenNumberPrint 中需要去实现这个 run() 方法,可以使用快捷键 Ctrl+i ,然后点
击:
//1.创建一个实现Runnable接口的类(实现类)
class EvenNumberPrint implements Runnable{
}
就可以重写 run() 方法啦,如下:
//1.创建一个实现Runnable接口的类(实现类)
class EvenNumberPrint implements Runnable{
//2.实现接口中的抽象方法run()方法 -->将此线程要执行的操作,声明在此方法体中
@Override
public void run() {
}
}
剩余23页未读,继续阅读
资源评论
雨翼轻尘
- 粉丝: 6w+
- 资源: 130
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功