多线程-线程两种实现方法(继承类、实现接口)

多线程——Java中继承Thread类与实现Runnable接口的区别 线程我只写过继承Thread类的,后来知道java多线程有三种方式,今天首先比较一下常用的继承Thread类和实现Runnable接口的区别。               按着Ctrl键进入Thread之后,发现Thread类也是Runnable接口的之类,这应该就是它们之间的联系了吧。   继承Thread类   class MyThread1 extends Thread{ p 阅读详情

 

实现多线程的2种方式:继承Thread 和 实现Runnable接口。

Thread和Runnable简介

Runnable 是一个接口,该接口中只包含了一个run()方法。它的定义如下:

public interface Runnable {
    public abstract void run();
}

Runnable的作用,实现多线程。我们可以定义一个类A实现Runnable接口;然后,通过new Thread(new A())等方式新建线程。

 

Thread 是一个类。Thread本身就实现了Runnable接口。它的声明如下:

public class Thread implements Runnable {}

Thread的作用,实现多线程。

 

Thread和Runnable的异同点

Thread 和 Runnable 的相同点:都是“多线程的实现方式”。
Thread 和 Runnable 的不同点:
Thread 是类,而Runnable是接口;Thread本身是实现了Runnable接口的类。我们知道“一个类只能有一个父类,但是却能实现多个接口”,因此Runnable具有更好的扩展性。
此外,Runnable还可以用于“资源的共享”。即,多个线程都是基于某一个Runnable对象建立的,它们会共享Runnable对象上的资源。
通常,建议通过“Runnable”实现多线程!

 

Thread和Runnable的多线程示例

1. Thread的多线程示例

下面通过示例更好的理解Thread和Runnable,借鉴网上一个例子比较具有说服性的例子。

// ThreadTest.java 源码
  class MyThread extends Thread{  
      private int ticket=10;  
      public void run(){
          for(int i=0;i<20;i++){ 
              if(this.ticket>0){
                  System.out.println(this.getName()+" 卖票:ticket"+this.ticket--);
              }
          }
     } 
 };
 
 public class ThreadTest {  
     public static void main(String[] args) {  
         // 启动3个线程t1,t2,t3;每个线程各卖10张票!
         MyThread t1=new MyThread();
         MyThread t2=new MyThread();
         MyThread t3=new MyThread();
         t1.start();
         t2.start();
         t3.start();
     }  
 } 

结果说明

(01) MyThread继承于Thread,它是自定义个线程。每个MyThread都会卖出10张票。
(02) 主线程main创建并启动3个MyThread子线程。每个子线程都各自卖出了10张票。

 

2. Runnable的多线程示例

下面,我们对上面的程序进行修改。通过Runnable实现一个接口,从而实现多线程。

// RunnableTest.java 源码
  class MyThread implements Runnable{  
      private int ticket=10;  
      public void run(){
          for(int i=0;i<20;i++){ 
              if(this.ticket>0){
                  System.out.println(Thread.currentThread().getName()+" 卖票:ticket"+this.ticket--);
              }
          }
     } 
 }; 
 
 public class RunnableTest {  
     public static void main(String[] args) {  
         MyThread mt=new MyThread();
 
         // 启动3个线程t1,t2,t3(它们共用一个Runnable对象),这3个线程一共卖10张票!
         Thread t1=new Thread(mt);
         Thread t2=new Thread(mt);
         Thread t3=new Thread(mt);
         t1.start();
         t2.start();
         t3.start();
     }  
 }

 

(01) 和上面“MyThread继承于Thread”不同;这里的MyThread实现了Thread接口。
(02) 主线程main创建并启动3个子线程,而且这3个子线程都是基于“mt这个Runnable对象”而创建的。运行结果是这3个子线程一共卖出了10张票。这说明它们是共享了MyThread接口的。

ZYNQ裸机LWIP双网口实现 文章目录前言一、LWIP双网口二、使用步骤1.部分说明2.部分代码总结 前言 一、LWIP双网口 由于项目需要多通讯口,查阅资料发现lwip支持多网口操作。于是,就开搞了。 二、使用步骤 1.部分说明 利用xemac_add函数在网卡链表中添加一个网卡,即使用netif块重复xemac_add操作。 先用轮询的方式实现双网口,后期修改为中断模式 2.部分代码 导入官方例程LWip echo server, 修改main函数,增加一个netif块 #if LWIP_IPV6==0 #if L.. 阅读详情

相关推荐

大白话,Android Studio安装及其资源分享(离线gradle配置)

安装AndroidAtudio,并通过aliClound镜像与离线gradle配置,来跳过相对“繁文缛节”的过程,直接实现开发

wangzixuanemp的博客 3598

多线程

多线程的基本概念_程序_进程_线程 一、 程序:指令的集合 进程:正在执行的程序是一个静态的概念,进程是程序的一次静态执行的过程,占用特定的地址空间。 每个进程都是独立的,由cpu,data,code三部分组成。 缺点:内存的浪费,cpu的负担。 线程:进程中的一个单一的连续控制流程,轻量级进程。 一个进程可以有多个并行的线程 一个进程中的线程共享相同的内存单元,地址,空间。可以访...

xjion的博客 1568

CentOS7 编译升级GCC至9.3.0

1)下载GCC9.2.0源码并解压 从GCC官方FTP下载地址可以看到GCC最新版本为9.3.0。由于官网下载速度慢,实际上用清华大学的镜像站进行下载,代码如下: wget -c /opt/tmp/ https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz #考虑到安装失败的可能性,创建一个临时文件夹来安装GCC...

haha123486的博客 1万+

线程的两种实现方式

线程的实现方式一:继承Thread类 public class ThreadTest { public static void main(String[] args) { // 创建一个线程】 MyThread myThread = new MyThread(); myThread.run();//不会启动线程,不会分配新的分支栈(这种方式是单线程) //启动线程 // start() 方法的作用是:启动一个分支线程,在JVM中

阿杰的博客 1071

Agent + 监控平台:自动诊断告警根因

根因分析、智能监控、AI Agent、告警风暴、异常检测、可观测性、故障诊断在现代分布式系统中,快速定位和解决问题是维持系统稳定性的关键。传统的监控系统虽然能够生成大量告警,但往往缺乏对告警根因的自动诊断能力,导致运维团队在告警风暴中难以快速定位问题。本文深入探讨了将AI Agent技术与监控平台结合,实现告警根因自动诊断的技术架构、理论基础和实现方法。我们将从第一性原理出发,分析根因诊断问题的本质,介绍基于Agent的智能监控系统设计,并通过实际案例展示其应用价值。文章同时涵盖了从理论到实践的全链路,包括

AIGC应用创新大全的博客 305

MATLAB安装

Matlab 2016a 安装包及破解教程百度云分享链接: 链接:https://pan.baidu.com/s/1i6BgD8p       密码:17gg   Matlab安装教程: 1、下载文件,得到R2016a_win64.part1.rar、R2016a_win64.part2.rar两部分安装文件和Matlab 2016a Win64 Crack破解文件。 2、解压安装文件(解...

qq_36734094的博客 17万+

Java期末考试试题及参考答案(12)

同步代码块的作用是控制线程,保证同步代码块中只能有一个线程在运行,保证了多线程操作数据的安全性。

谷哥的小弟 5057

Windows Server安装Intel I219-V网卡驱动完整教程

在Windows Server系统上安装Intel I219-V网卡驱动的方法。

小白成长历程 5186

Java--多线程--Thread类+Runnable接口

一个进程是一个包含自身地址的程序,每个独立执行的程序都称为进程,也就是正在执行的程序,系统可以分配给每个进程一段有限的使用CPU的时间(CPU时间片),CPU在这个时间段中执行某个进程,然后下一个时间片又会跳至另一个进程中去执行;由于CPU转换很快,所以使得每个进程好像是在同时执行一样。Java语言提供了并发机制,程序中可以执行多个线程,每个线程完成一个功能,并于其他线程并发执行,这种机制被称为多线程。

qq_40132294的博客 2494

MTK眼中6G物理层与无线协议的进化之路

提议统一波束和小区级的测量、报告和切换框架/流程,进一步减少移动性切换过程中的中断,采用可扩展框架/流程,允许在不同移动性场景中进行部分用户设备配置更新以实现快速切换,支持用户设备发起的移动性(同步/切换)以降低延迟和因信令交换导致的失败,设计移动性RS以实现空闲状态下的节能和连接状态下的无缝用户体验,实现5G/6G间的无缝互操作移动性,为固定无线接入(FWA)提供潜在增强,构建统一的跨层移动性框架以降低复杂度、减少中断和失败。为适应多样化的流量类型,需要灵活的帧结构和高层时间对齐。

asd199086的博客 1748

LeRobot 入门教程(七)数据集

LeRobot Dataset v3.0 是机器人学习数据的标准化格式,支持多模态时间序列数据和视频的统一访问。该版本通过基于文件的存储(Parquet/MP4)、关联元数据和Hub原生流式处理等新特性,显著提升了性能并降低了存储开销。文档详细介绍了格式设计、安装使用、数据记录与加载方法,以及从v2.1迁移到v3.0的步骤,特别针对大型数据集(如DROID 1.0.1)的处理提供了SLURM集群移植方案。v3.0通过优化文件组织和元数据管理,实现了更快的加载速度、更高的内存效率和更好的可扩展性。

2506_90492529的博客 2055

多线程开发实战:Java实现多线程四种方式及相关方法原理

本文带大家了解Java实现多线程的四种方法以及实现多线程的重要注意事项和难点!

陈橘又青的博客 3万+

踩过20+工控视觉项目的坑后,我用C# + 海康相机 + YOLOv11实现了零依赖产线缺陷检测

触发式检测:只有光电传感器检测到零件到位,才触发相机拍照和算法检测,不是持续推理,减少工控机性能占用;全链路本地运行:从图像采集、算法推理到不良品剔除,所有逻辑全在本地工控机运行,不需要外网、不需要云端服务,哪怕产线断网也能正常运行;异常降级机制:算法推理异常时,系统自动触发产线缓停,同时声光告警,不会让不良品流到下工序,满足汽车行业IATF16949质量要求;模块化解耦:算法核心层和业务逻辑层完全分离,后续更换YOLO模型、新增缺陷类型,只需要替换模型文件,不需要修改业务逻辑;全链路可追溯。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 152

实现多线程的两种方法:继承Thread类或实现Runnable接口

实现多线程的两种方法:继承Thread类或实现Runnable接口Java中实现多线程有两种方法:继承Thread类和实现Runnable接口,在程序开发中只要是多线程,我们一般都是实现Runnable接口,原因归结为一点:实现接口比继承类要好。多线程的第一种实现方式:继承Thread类步骤如下 创建一个继承Thread的类(假定为A),并重写Thread的run方法 构造一个A类对象

wojiushimogui的博客 5412

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

实现多线程有两种方法: Thread类继承和Runnable接口实现

学习笔记,转自:http://www.cnblogs.com/heima-jieqi/archive/2012/04/09/2439080.html   用于线程实现的类和接口分别是什么?简单举出使用范例。 Thread类继承和Runnable接口实现: 1)创建线程的第一种方式:继承Thread类。 步骤: (1),定义类继承Thread。 (2),复写Thread类中的run...

dy_f的专栏 580

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java类继承runnable_java实现多线程的两种方式继承Thread类和实现Runnable接口的方法...

java实现多线程的两种方式继承Thread类和实现Runnable接口的方法发布于 2020-8-10|复制链接下面小妖就为大家带来一篇java实现多线程的两种方式继承Thread类和实现Runnable接口的方法。小妖觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小妖过来看看吧实现方式和继承方式有什么区别呢?*区别:*继承Thread:线程代码存放在Thread子类run方法中*实...

weixin_35249165的博客 309

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

实现多线程有两种方法: Thread类继承和Runnable接口实现

l创建线程的第一种方式:继承Thread类。 步骤: 1,定义类继承Thread。 2,复写Thread类中的run方法。 目的:将自定义代码存储在run方法。让线程运行。//run();仅仅是对象调用方法。而线程创建了,并没有运行。 3,调用线程的start方法, 该方法两个作用:启动线程,调用run方法。 Demod=newDemo();//创建好一个线程。 ...

weixin_34311757的博客 626

java创建多线程的两种方法(继承Thread类/实现Runnable接口)

Thread 创建线程步骤: 通常创建一个线程的步骤如下。 (1)创建一个新的线程类,继承 Thread 类并覆盖 Thread 类的 run()方法。 class ThreadType extends Thread{ public void run(){ …… } } (2)创建一个线程类的对象,创建方法与一般对象的创建相同,使用关键字 new 完成。

續寫經典 4290

Java中实现多线程有两种方法的区别:继承Thread类、实现Runnable接口

转载自:http://blog.youkuaiyun.com/ns_code/article/details/17161237     Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势:     1、可以避免由于Java的单继承特性

HD243608836的博客 966

java多线程实现runnable接口_java实现多线程的两种方式继承Thread类和实现Runnable接口的方法...

实现方式和继承方式有什么区别呢?*区别:*继承Thread:线程代码存放在Thread子类run方法中*实现Runnable:线程代码存放在接口的子类的run方法中*实现方式的好处:避免了单继承的局限性*在定义线程时,建议使用实现方式,当然如果一个类没有继承父类,那么也可以通过继承Thread类来实现多线程*注意:Runnable接口没有抛出异常,那么实现它的类只能是try-catch不能thro...

weixin_32661683的博客 359

Java多线程、使用多线程的优点、线程的创建和使用、Thread类、创建线程的两种方式继承Thread类、实现Runnable接口、Thread类的有关方法、线程的调度、无效的源发行版、线程的分类

程序、进程、线程、单核CPU和多核CPU的理解、并行与并发、比较创建线程的两种方式、继承方式和实现方式的联系与区别继承Thread类1) 定义子类继承Thread类。2) 子类中重写Thread类中的run方法。3) 创建Thread子类对象,即创建了线程对象。4) 调用线程对象start方法:启动线程,调用run方法。方式二:实现Runnable接口1) 定义子类,实现Runnable接口。2) 子类中重写Runnable接口中的run方法。3) 通过Thread类含参构造器创建线程对象。4) 将Runn

Redamancy06的博客 375
上一篇: Kafka操作命令
下一篇: 多线程-synchronized关键字
Mark_XC
博客等级 码龄9年 16粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值