关于java的Runnable接口

你不知道的Runnable接口,深度解析Runnable接口 本文描述的是Android中的Runnable接口。因Android中的线程源自于Java,所以首先需要了解Java中的线程,有关Java中的线程请看这篇文章Android(线程一) 线程 ! Java开发中,我们实现多线程,有两种方式,一种是继承Thread类,一种是实现Runnable接口。但是,我们真的理解Runnable?Runnable和Thread一样吗?都是开... 阅读详情

关于java的Runnable接口

在前面的文章中,我们了解到了继承Thread类,重写run方法,用来实现多线程等知识,我们本篇文章来介绍一下创建线程方式的第二种,实现runnable接口😀。

一、Runnable

创建线程的第二种方式,通过实现Runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法。

1、首先我们创建一个新的类,TestThread3。

package thread;

public class TestThread3
{

}

2、类实现接口Runnable,重写run方法。

package thread;

public class TestThread3 implements Runnable{
    @Override
    public void run() {
        
    }
}

3、对比Thread的多线程实现。

  • Thread
package thread;

public class TestThread1 extends Thread{
    @Override
    public void run() {
        //run方法线程体
        for (int i = 0; i < 10; i++) {
            System.out.println("学习线程--"+i);
        }
    }

    public static void main(String[] args) {
        //创建一个线程对象
        TestThread1 testThread1 = new TestThread1();
        //调用start方法,开启线程
        testThread1.run();
        //主线程
        for (int i = 0; i < 10; i++) {
            System.out.println("看代码--"+i);
        }
    }
}
  • Runnable
  • 这种实现方法称之为代理。
package thread;

public class TestThread3 implements Runnable{
    @Override
    public void run() {
        //run方法线程体
        for (int i = 0; i < 10; i++) {
            System.out.println("学习线程--"+i);
        }
    }
    public static void main(String[] args) {
        //创建一个线程对象
        TestThread3 testThread3 = new TestThread3();
        //创建Thread类的对象
        Thread thread = new Thread(testThread3);//在构造函数中传参
        //调用start方法,开启线程
        thread.start();
        //new Thread(testThread3).start();//可以简写
        //主线程
        for (int i = 0; i < 10; i++) {
            System.out.println("看代码--"+i);
        }
    }
}

4、执行以下代码。

看代码--0
看代码--1
看代码--2
看代码--3
看代码--4
学习线程--0
看代码--5
看代码--6
学习线程--1
学习线程--2
学习线程--3
学习线程--4
学习线程--5
学习线程--6
学习线程--7
学习线程--8
学习线程--9
看代码--7
学习线程--10
学习线程--11
学习线程--12
学习线程--13
学习线程--14
学习线程--15
学习线程--16
学习线程--17
学习线程--18
学习线程--19
看代码--8
看代码--9
看代码--10
看代码--11
看代码--12
看代码--13
看代码--14
看代码--15
看代码--16
看代码--17
看代码--18
看代码--19

5、Thread底层实现方法。

public Thread(Runnable target) //构造函数
{
    init(null, target, "Thread-" + nextThreadNum(), 0);
}

6、Runnable底层实现。

public interface Runnable {
    /**
     * When an object implementing interface <code>Runnable</code> is used
     * to create a thread, starting the thread causes the object's
     * <code>run</code> method to be called in that separately executing
     * thread.
     * <p>
     * The general contract of the method <code>run</code> is that it may
     * take any action whatsoever.
     *
     * @see     java.lang.Thread#run()
     */
    public abstract void run();
}

二、网图下载用Runnable实现

  • 用Thread类实现的网图下载代码。
package thread;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class TestThread2 extends Thread {
    private String url;
    private String name;

    public TestThread2(String url, String name) {
        this.url = url;
        this.name = name;
    }

    @Override
    public void run() {
        WebDownloader webDownloader = new WebDownloader();
        webDownloader.downloader(url,name);
        System.out.println("下载了文件名为:"+name);
    }

    public static void main(String[] args) {
        TestThread2 t1 = new TestThread2("https://img.alicdn.com/imgextra/i3/95764894/O1CN01QztdCZ1m1VDPQnle3_!!0-saturn_solar.jpg_468x468q75.jpg_.webp","1.jpg");
        TestThread2 t2 = new TestThread2("https://img.alicdn.com/imgextra/i3/95764894/O1CN01QztdCZ1m1VDPQnle3_!!0-saturn_solar.jpg_468x468q75.jpg_.webp","2.jpg");
        t1.start();
        t2.start();
    }
}
//下载器
class WebDownloader{
    //下载方法
    public void downloader(String url,String name)
    {
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("IO异常");
        }
    }
}
  • 用Runnable接口实现代码。
package thread;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class TestThread2 implements Runnable //类实现接口
{
    private String url;
    private String name;

    public TestThread2(String url, String name) {
        this.url = url;
        this.name = name;
    }

    @Override
    public void run() {
        WebDownloader webDownloader = new WebDownloader();
        webDownloader.downloader(url,name);
        System.out.println("下载了文件名为:"+name);
    }

    public static void main(String[] args) {
        TestThread2 t1 = new TestThread2("https://img.alicdn.com/imgextra/i3/95764894/O1CN01QztdCZ1m1VDPQnle3_!!0-saturn_solar.jpg_468x468q75.jpg_.webp","1.jpg");
        TestThread2 t2 = new TestThread2("https://img.alicdn.com/imgextra/i3/95764894/O1CN01QztdCZ1m1VDPQnle3_!!0-saturn_solar.jpg_468x468q75.jpg_.webp","2.jpg");
        new Thread(t1).start();//区别就在这里
        new Thread(t2).start();
    }
}
//下载器
class WebDownloader{
    //下载方法
    public void downloader(String url,String name)
    {
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("IO异常");
        }
    }
}

三、总结

  • 继承Thread类

1、子类继承Thread类具备多线程能力,重写run方法。

2、启用线程:子类对象.start()

3、不建议使用:避免OOP单继承局限性。

  • 实现Runnable接口

1、实现Runnable具备多线程能力。

2、启用线程:传入的目标对象+Thread对象.start()

3、推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用。

Java之多线程之实现Runnable接口 Java之多线程之实现Runnable类 阅读详情

相关推荐

Java并发编程系列02:实现Runnable接口方式实现多线程

1、实现Runnable接口方式实现多线程 与继承Thread类相比,实现Runnable接口的MyThread类在结构上与之前是没有区别的,但是有一点是有严重区别的,如果继承了Thread类,那么可以直接继承start()方法,但是实现Runnable接口是没有start()方法的。不管何种情况下,如果要启动多线程一定要依靠Thread类完成。 如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下: 1.1定义Runna

fen_fen的专栏 7350

【Java】线程基本使用——实现 Runnable接口

实现 Runnable 接口 说明 java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时在用继承Thread类方法来创建线程显然不可能了。 java设计者们提供了另外一个方式创建线程,就是通过实现Runnable接口来创建线程 应用案例 请编写程序,该程序可以每隔1秒。在控制台输出“hi!”,当输出10次后,自动退出。 请使用实现Runnable接口的方式实现。这里底层使用了设计模式【代理模式】=> 代码模拟实现Runnable接口 开发线程的机制。 ...

兮动人 2万+

Java Runnable接口详解及代码示例

Java中的Runnable接口是一个功能接口,用于定义可以在单独线程中执行的任务。通过实现Runnable接口,可以将任务封装在一个可执行对象中,并在需要时通过线程来执行。Runnable接口位于java.lang包中,它是一个函数式接口,只包含一个抽象方法。步骤2:实现Runnable接口的run()方法,在该方法中定义线程要执行的任务逻辑。方法中,我们定义了线程要执行的任务逻辑,这里只是简单地打印一条消息。的类,实现了Runnable接口,并重写了。在上面的示例中,我们创建了一个名为。

OyLinux的博客 924

Java 线程状态之 RUNNABLE

深入探讨了 Java 线程的 RUNNABLE 状态, 特别是对处在 IO 阻塞时的状态进行了深入分析.

Just do IT 5821

MATLAB/Simulink实战:三电平逆变器SVPWM调制从入门到精通(附完整仿真模型)

本文提供了一份详尽的MATLAB/Simulink实战指南,手把手教你从零搭建三电平逆变器的SVPWM调制系统。文章深入剖析了27个空间矢量的分区与分解算法,并完整实现了包含中点电位平衡控制的Simulink仿真模型,旨在帮助电力电子与电机控制领域的学习者和工程师跨越从理论到实践的鸿沟。

sugar的博客 1213

图相似度模型(论文篇)

图相似度模型

weixin_43702653的博客 5747

Java 多线程之 Runnable 接口

文章目录前言Runnable 接口简介实例教学单线程计算多线程实例Thread类的常用方法常用方法线程的生命周期线程状态变化 前言 前几日写过一篇文章入门级的《Java 多线程之 Thread类》,简单介绍了使用Thread类进行多线程计算的基本方法。由于Thread是线程类,需要将方法传入后才能执行。将了将线程和操作方法分享,Java提供了Runnable接口。本文将介绍Java中Runnabl...

郝伟老师的博客——大数据、并行计算与人工智能时代 1582

断点回归(regression discontinuity design)学习笔记

本篇博文主要是对断点回归的一些学习和总结~ 学习材料如下: 1 断点回归设计RDD分类与操作案例 2 RDD断点回归, Stata程序百科全书式的宝典 3 断点回归设计的前沿研究现状, RDD 4 让“跳跃”更有意义:断点回归设计(RDD) 5 Stata: 断点回归 (RDD) 教程 6 怎么用通俗的语言解释断点回归?它与DID的区别是什么 7 Watering Down Environmental Regulation in China,Guojun He, Shaoda Wang, Bing Zhan

Claire_chen_jia的博客 9万+

java实现runnable接口_JAVA 实现Runnable接口

//仅作为学习笔记/*需求: 实现一个售票程序创建线程的第二种方式:实现Runnable接口步骤:1,定义类实现Runnable接口2,覆盖Runnable接口中的run方法将线程要运行的代码存放在该run方法中3,通过Thread 类建立线程对象4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数为什么要将Runnable接口中的子类对象传递给Thread的构造函数因为...

weixin_39609541的博客 975

ddr3ip核心_DDR3 IP 核配置

DDR3 控制器 IP 核2.DDR3 IP核配置点击 Flow Navigator 面板下的“Project Manager -->IP Catalog”。 在“Memories & Storage Elements -->Memory Interface Generators”分类展开后,可以看到名为“Memory Interface Generator (MIG 7 ...

weixin_33049919的博客 2935

S7-200SMART 中如何实现单按钮启停功能(两种方法)?

S7-200SMART 中如何实现单按钮启停功能(两种方法),Toggle库指令,状态翻转

Robot_PLC_HMI_Automation 1万+

JAVA Runnable接口

package ch01; class RenWu implements Runnable{ //重写run()方法 public void run() { //获取当前线程的名字 System.out.println("当前线程:"+Thread.currentThread().getName()); for(int i=0;i<30;i++) { System.o

qq_40270751的博客 2万+

2026年江苏省职业院校技能大赛高职组“软件测试”赛项智能体辅助测试参考答案

2026年江苏省职业院校技能大赛高职组“软件测试”赛项智能体辅助测试参考答案

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 1324

java runnable接口 sleep_java Runnable接口如何创建线程

java Runnable接口如何创建线程导语:编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。下面是java Runnable接口创建线程的相关资料,欢迎阅读:java Runnable接口创建线程创建一个线程,最简单的方法是创建一个实现Runnable接口的类。为了实现Runnable,一个类只需要执行一个方法调用run(),声明如下:public void run()你可...

weixin_42516414的博客 142

PD详解 扩展消息——Source_Capabilities_Extended Message

PD的协议层分为控制消息,数据消息还有扩展消息,今天大师匈讲一下扩展消息中的source_cap_extended。这个消息在扩展消息中算是比较关键的东西。 扩展消息中的source_cap_extended 大师匈先上图,然后逐一解释; 上面的图表说了source_cap_ext中包含了哪些内容。 我们注意到在source_cap扩展消息中是以字节为单位的,并不是像source_cap中以一个object为单位,当然有注意到PD标准spec中说明的扩展消息的话,那里有说明,在header之后的字节

大师匈的博客 3516

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用 ,人工智能,计算机视觉,大模型,AI,本文解读了最新相关论文,包括基于图神经网络(GCN)的ML-GCN方法,通过构建标签相关矩阵建模依赖关系;区域潜在语义依赖的RLSD模型,定位关键区域并利用RNN建模语义依赖;以及语义图表示学习的SSGRL框架,结合语义解耦与交互模块。通过实战应用,展示了基于PyTorch的ML-GCN模型实现,包括图像特征提取、标签依赖建模及训练评估流程,为多标签图像分类提供了有效解决方案。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

java—Runnable接口与Callable接口的区别

Java中创建线程的方式有很多种(本质上只有一种),其中,使用Runnable接口和Callable接口都可以实现线程任务的定义,但二者在使用上有一些区别,比如是否有返回值、是否能抛出异常等。本文从接口定义、区别、示例代码等方面,对两个接口进行介绍。Runnable/*** thread.* <p>Callable/***/注意到:① 二者均有注解,即二者都是函数式接口,都可以使用lambda表达式简化对象的创建。② Callable接口是一个泛型接口,有一个泛型参数V作为抽象方法。

qq_29356529的博客 542

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java runnable接口_java实现Runnable接口适合资源的共享

本文为大家分享了java实现Runnable接口适合资源的共享,供大家参考,具体内容如下Java当中,创建线程通常用两种方式:1、继承Thread类2、实现Runnable接口但是在通常的开发当中,一般会选择实现Runnable接口,原因有二:1.避免单继承的局限,在Java当中一个类可以实现多个接口,但只能继承一个类2.适合资源的共享原因1我们经常听到,但是2是什么呢?下面用一个例子来解释:有5...

weixin_36295555的博客 865

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java中通过实现Runnable接口的方式创建多线程

通过实现Runnable接口的方法实现多线程: 定义一个类实现Runnable接口 实现run方法,将线程执行体编写 创建线程对象,调用start()方法启动线程 package com.company.threadlesson; //创建线程方式二:实现Runnable接口,重写run方法,执行线程需要丢入runnable的实现类对象,最后代理类执行start方法 public class TestThread3 implements Runnable{ @Override publ

super_lord的博客 1347

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java多线程实现之Runnable接口深度解析

Java除了可以继承Thread类来创建和管理线程,还可以通过实现Runnable接口来实现多线程。本文我将详细介绍Runnable接口的原理、实现方式、高级应用以及与Thread类的对比,并通过多个实战案例展示其在实际开发中的应用场景,帮你全面掌握Runnable接口的使用

aa_hdkf_vg的博客 2232

java runnable接口

概述 Runnable 是接口。 Thread 是类,且实现了Runnable接口。 Thread部分源码 public class Thread implements Runnable { private static class Caches { static final ConcurrentMap subclassAudits = new ConcurrentHashMap(); ...

yan964461336的博客 1万+

Java多线程_Runnable接口

开发工具与关键技术:Java、myEclipse 作者:吴晓佩 撰写时间:2019年08月13日 线程是通过扩展Thread类来创建的,如果程序需要继续继承其他类(非Tread类),而且还要使当前类实现多线程,因为Java语言中不支持多继承,所以可以通过Runnable接口来实现。实质上Thread类实现了Runnable接口,其中run()方法是对Runnable接口中的run()方法的具体实现...

weixin_44544716的博客 303

java实现runnable接口_Java通过实现Runnable接口实现多线程

/**通过实现Runnable接口实现多线程Java程序只允许使用单一继承,即一个子类只能有一个父类所以在Java类中 如果一个类继承了某一个类。同时又想要采用多线程的技术的时候就不能用Thread类产生线程 所以这里要用Runnable接口来创建线程@author bo*/public class RunableTest {public static void main(String[] ar...

weixin_34352633的博客 412

Java 线程实现Runnable接口

        线程都是通过扩展Thread类来创建的,如果程序员需要继承其他类(非Thread类)并使该程序可以使用线程,就需要使用Runnable接口。例如,一个扩展JFrame类的GUI程序不可能再继承Thread类,因为Java语言中不支持多继承,这时该类就需要实现Runnable接口使其具有使用线程的功能。实现Runnable接口的语法:public class Thread exten...

Hern(宋兆恒) 866

Java实现Runnable接口创建多线程

Java实现Runnable接口创建多线程 通过继承Thread类,实现多线程,但是,这种方式有一定的局限性,因为,Java中只支持单继承,一个类一旦继承了某个父类,就无法再继承Thread类 比如,学生类Student继承了Person类,就无法通过继承Thread类,创建线程 针对这种情况,Thread类提供了另外一个构造方法Runnable target 其中,Runnable是一个...

天高任鸟飞 4431

java runnable 匿名_匿名类实现Runnable接口 | 学步园

15.2.3 使用Runnable接口我们知道,Java中的类只能够是单继承,也就是说,如果一个类为了使用线程而继承了Thread类,它就不能再继承别的类了。这很可能给编程带来不便。本节中介绍的就是一种脱离继承来使用线程的方法。这个方法的核心就是Runnable接口。Runnable接口的全限定名是java.lang.Runnable。它其中只有一个抽象方法void run()。为了了解如何在线...

weixin_33661931的博客 961
上一篇: 关于java的网图下载
下一篇: VUE3初识
落满樱花的羊
博客等级 码龄5年 1021粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值