Thread和Runnable浅析

Thread和Runnable的区别和联系 Thread和Runnable的区别和联系 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口。 一、Thread类 Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,下面看例子:  pu 阅读详情

Thread和Runnable是java实现多线程的两种方式,前者需要继承,后者需要实现接口。

线程:线程是进程上的一种划分,是进程的执行单元。

进程:是具有一定独立功能,处于运行过程中的程序。一般而言,进程包括三大特征:独立性、并发性和动态性。


下面来分析Thread和Runnable的区别:

1、Thread是要实现类继承的:

public class ThreadTest extends Thread
Runnable接口要实现:

public RunnableTest implements Runnable

2、Thread:要启动一个人线程,直接调用start()方法即可;

       Runnable:要启动一下线程,可以如下:

,之后调用start()即可。


3、Thread也是实现了Runnable接口的:


4、继承Thread多个线程之间不能实现资源的共享,而实现了Runnable接口之后,可以实现多个线程之间的资源共享。

下面以买票为例:

class Demo extends Thread{
	//总共票数为10
	private int ticket = 10;
	
	public void run(){
		while(ticket>0){
			System.out.println("卖票"+":"+ticket--);
		}
	}
}

public class ThreadDemo03{
	public static void main(String[] args){
		//下面是模拟四个售票点
		Demo person1 = new Demo();
		Demo person2 = new Demo();
		Demo person3 = new Demo();
		Demo person4 = new Demo();
		
		person1.start();
		person2.start();
		person3.start();
		person4.start();
	}
}

输出结果为:



class Demo implements Runnable{
	//总共票数为10
	private int ticket = 10;
	
	public void run(){
		while(ticket>0){
			System.out.println("卖票"+":"+ticket--);
		}
	}
}

public class ThreadDemo04{
	public static void main(String[] args){
		//同一资源
		Demo demo = new Demo();
		//四个售票点,控制同一资源
		new Thread(demo).start();
		new Thread(demo).start();
		new Thread(demo).start();
		new Thread(demo).start();
	}
}

输出结果为:



分析上面的结果:Thread的同一张票被多人买走,这在实际情况中是不可能发生的。而Runnable接口,输出的结果正是我们需要的。


综上所述,我们可以看出,实现Runnable接口适合处理多个线程访问同一资源的情况,可以避免由于java单继承特性带来的额局限,有利于程序的健壮性,代码能够被多个线程共享。因此,大多数情况下,建议使用Runnable接口。

第十篇|网络子系统 ②——无损以太网、PFC/ECN、DCQCN 与拥塞可视化 网络部分了解了解 阅读详情

相关推荐

数字蓝军智能体关键技术课题研究

本研究提出基于人工智能大模型技术构建智能数字蓝军智能体系统,旨在提升作战模拟推演的智能化水平。系统采用"大模型+小模型"混合架构,整合感知、决策、规划、学习等核心模块,实现动态、智能的作战方案生成。关键技术包括大模型与知识图谱融合、多智能体协同、战场态势数字化表示等。研究成果将形成可复用的垂直领域智能体框架,为军事训练提供智能化对抗平台。该系统不仅能模拟真实对手的决策行为,还能通过自我博弈持续进化,有效增强推演的真实性和对抗性。

weixin_49042442的博客 1547

多线程(一) | 聊聊Thread和Runnable

多线程的用法应该也算是Java语言开发过程中永远绕不过去的一个难点。本系列着重讲解多线程中的一些API用法。注意这里对于多线程的概念将不展开介绍,如果对于什么是多线程等基本概念不太了解的,建议先了解一些概念后再来学习。本文将直接从多线程的创建开始。 一、Thread类和Runnable接口 Thread类就是代表了线程的抽象,由于线程的启动执行等必然要和底层的操作系统打交道,所有在Thread类中有很多native修饰的本地方法。这个类中也包含了很多对于线程的操作。比如通过构造方法我们可以创建线程,通过

lsqingfeng的博客 2782

CTF——流量分析题型整理总结

我见过的流量分析类型的题目总结: 一,ping 报文信息 (icmp协议) 二,上传/下载文件(蓝牙obex,http,难:文件的分段上传/下载) 三,sql注入攻击 四,访问特定的加密解密网站(md5,base64) 五,后台扫描+弱密码爆破+菜刀 六,usb流量分析 七,WiFi无线密码破解 八,根据一组流量包了解黑客的具体行为 例题: 一,ping 报文信息 (icm...

小锤队长的博客 5万+

Thread和Runnable的关系

1. 简介 Thread是一个类,而Runnable是一个接口。 Thread类实现了Runnable接口,Runnable接口里只有一个抽象的run()方法。说明Runnable不具备多线程的特性。Runnable依赖Thread类的start方法创建一个子线程,再在这个子线程里调用run()方法,才能让Runnable接口具备多线程的特性 2. 使用Thread创建线程 创建一个自定义类...

盲流子的博客 3240

【基金量化研究系列】基金绩效归因模型——Brinson多期归因模型

文章目录1. 引言2. Brinson单期归因模型2.1 模型框架2.2 公式推导3. Brinson多期归因模型3.1 模型框架3.2 公式推导4. Brinson模型的应用场景4.1 基金组合归因4.2 基金经理能力刻画4.3 大类资产配置应用5. 模型的实现与实证案例研究写在最后 1. 引言 在 2. Brinson单期归因模型 2.1 模型框架 wp wb rp 组合收益:wp rp 择股收益:wb rp rb 择时收益:wp rb 基准收益:wb rb 2.2 公式推

Mikey_Sun的博客 1万+

从零到一:手把手教你用C#开发AGV调度系统(附避坑指南)

本文详细介绍了如何使用C#开发高效的AGV调度系统,涵盖从环境搭建到核心算法实现的完整流程。重点解析了动态路径规划、多机协同等关键技术,并提供了实用的避坑指南和性能优化建议,帮助开发者快速构建工业级车辆控制调度系统。

blockchain9miner的博客 741

彻底理解Runnable和Thread的区别

在实际工作中,我们很可能习惯性地选择Runnable或Thread之一直接使用,根本没在意二者的区别,但在面试中很多自以为是的菜货面试官会经常而且非常严肃的问出:请你解释下Runnable或Thread的区别?尤其是新手就容易上当,不知如何回答,就胡乱编一通。鄙人今天告诉你们这二者本身就没有本质区别,就是接口和类的区别。问出这个问题的面试官本身就是个二流子!如果非要说区别,请看如下: Runnable的实现方式是实现其接口即可 Thread的实现方式是继承其类 Runnable接口支持多继承,但基本上

blinkingsss的博客 6542

从零到一:STM32 CubeMX与WS2812B的DMA驱动艺术

本文详细介绍了如何使用STM32 CubeMX和DMA技术驱动WS2812B RGB LED灯条,从硬件设计到软件实现的全过程。通过CubeMX配置定时器和DMA,实现高效的PWM波形生成与数据传输,解决传统GPIO控制资源占用高的问题。文章还提供了颜色编码、动画效果实现及常见问题解决方案,助力开发者快速掌握智能LED控制技术。

weixin_28278377的博客 977

两种线程:Runable与Thread区别详解

前言:由于毕业

启舰 8861

Allegro如何改变线宽操作指导

用Allegro做pcb设计的时候,改变走线线宽是非常常用的功能,如下图。线宽目前是12mil,需要把线宽改成15mil。如何改变线宽操作指导。

weixin_54787054的博客 4254

OpenOCD入门到精通:第 4 章 配置文件体系详解

本文深入解析OpenOCD配置文件的体系结构和工作机制。首先介绍了配置文件的搜索路径优先级和加载顺序,以及配置阶段与运行阶段的区别。然后详细分析了interface配置文件的适配器参数调优方法,包括ST-Link、CMSIS-DAP和FTDI等常见调试器的配置示例。最后重点讲解了target配置文件的核心结构,包括TAP声明、目标创建和工作区设置等关键步骤,并以stm32f1x为例展示了完整的配置流程。通过本文可以全面了解OpenOCD配置文件的分层设计理念和参数化配置方法。

从事嵌入式linux android驱动开发,拥有全栈能力 594

Thread Runnable java_浅析Java中Runnable和Thread的区别

线程的起动并不是简单的调用了你的RUN方法,而是由一个线程调度器来分别调用你的所有线程的RUN方法,我们普通的RUN方法如果没有执行完是不会返回的,也就是会一直执行下去,这样RUN方法下面的方法就不可能会执行了,可是线程里的RUN方法却不一样,它只有一定的CPU时间,执行过后就给别的线程了,这样反复的把CPU的时间切来切去,因为切换的速度很快,所以我们就感觉是很多线程在同时运行一样.你简单的调用r...

weixin_42299140的博客 204

U盘插入电脑时发出声音但不显示——编程解决方案

以上是一些常见的编程解决方案,帮助您解决U盘插入电脑时发出声音但不显示的问题。请注意,这些解决方案可能因不同的情况而略有不同,因此请根据您的具体情况进行调整和尝试。当您将U盘插入电脑时,如果您听到了连接声音,但是U盘却没有在文件资源管理器或桌面上显示出来,这可能是由于一些常见问题导致的。U盘的文件系统格式可能与您的计算机不兼容,导致无法正确识别。如果输出显示U盘的文件系统格式与您的计算机不兼容,您可以尝试重新格式化U盘或使用其他兼容的文件系统格式。其中,X是U盘的磁盘编号,Y是您想要分配给U盘的盘符。

ByteEchoX的博客 2462

浅析Java中Runnable和Thread的区别

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。接下来通过本文给大家浅析Java中Runnable和Thread的区别,一起看看吧 线程的启动并不是简单的调用了你的RUN方法,而是由一个线程调度器来分别调用你的所有线程的RUN方法, 我们普通的RUN方法如果没有执行完是不会返回的,也就是会一直执行下去...

一个人的江湖 503

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java基础-Thread和Runnable、start()和run()浅析

1.Thread和Runnable区别我们要清楚Thread是一个类,他实现了Runnable接口,Runnable是一个接口,这是他们本质上的区别,我们都知道java是单继承语言,一个子类他的父类只能有一个,但是可以实现多个接口,我们平时需要新建一个线程通常的方法有两种,废话不多说,代码说话。public class ThreadTest { public static void main(S...

Kuang_2014的专栏 3262

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

浅析java的Runnable,Callable和Thread三种创建线程的方式

java的三种进程创建方式

gb4215287的博客 208

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

2021-10-22(java-多线程)

继承Thread类: public class Tt extends Thread{ //继承thread类 @Override //重写run方法 public void run() { for (int i = 0; i < 20; i++) { System.out.println("1:"+i); } } pub

qq_45688193的博客 2385

Thread和Runnable创建多线程的方式的区别

线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。同一进程中的多条线程将共享该进程中的全部系统资源。 源码浅析 Runnable源码 Runnable是个空接口,只有一个抽象方法run(); @FunctionalInterface publ...

592

Thread源码浅析

一、Thread类的数据结构 class Thread implements Runnable { //... private char name[];//线程的名字 private int priority;//线程的优先级 //... /* Whether or not the thread is a daemon thr

在风雨中奔跑 488

Java Thread 源码浅析

文章目录Thread 源码分析简介进程与线程的区别Java中的线程Thread源码解析start方法分析 Thread 源码分析 简介 在介绍线程前先了解下进程与线程的概念 进程 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。 进程一般由程序,数据集合和进程控制块三部分组成。程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序

woshiyizhiyu0的博客 312

JAVA基础 之 Thread源码浅析

好久没看源码了,上次写完一部分常见的集合类的源码分析之后,今天抽空看了看Thread的源码。今天也来记录分析一下。 我们都知道创建线程,有两种方案。一个是继承Thread一个是实现runnable接口。具体的方法就不写了。我们直接从Thread类分析入手。 先来看一下构造器 这是Thread提供的构造器。我们看到有我们经常用到的一个空构造器,一个带入参为runnable的构造器。 ...

maybe的博客 323

JAVA.Lang.Thread浅析

两种方式实现生成一个线程 继承Thread类,并覆盖run方法,线程的工作方法就是run方法. 如下 class MyThread extends Thread{ public void run(){ do…. } } MyThread thread=new MyTread(); thread.start(); 实现Runbale接口,实现run方法

wskyp的博客 322

Android Thread 浅析和使用小结

一.线程的状态 线程包括几个状态: 创建(new) Thread thread=new Thread; 就绪(runnable) thread.start(); 运行(running) 线程只能从就绪状态进入到运行状态 阻塞(blocked) 该状态是线程因为某种原因放弃了cpu使用权限,暂时停止运行。 阻塞的情况有三种...

再简单的事,也要用心做成! 9791

JUC框架 从Runnable到Callable到FutureTask 使用浅析

本文旨在简单讲解Runnable、Callable、FutureTask这几个线程执行相关的接口和类。为后面FutureTask源码讲解作铺垫。

anlian523的博客 759

JDK源码那些事儿之浅析Thread上篇

JAVA中多线程的操作对于初学者而言是比较难理解的,其实联想到底层操作系统时我们可能会稍微明白些,对于程序而言最终都是硬件上运行二进制指令,然而,这些又太过底层,今天来看一下JAVA中的线程,浅析JDK源码中的Thread类,之后能帮助我们更好的处理线程问题

Orange's Life 194

Java 浅析 Thread.join()

概要 本文分三个部分对Thread.join()进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() 的示例和作用 1.1 示例 1 // 父线程 2 public class Parent { 3 public static void main(String[] args) { 4 // 创建child对象,此时child表示的线程处于NEW状态 5

slw20010213的博客 223
上一篇: android事件处理机制-基于监听的事件处理
下一篇: java线程中的常用方法
StevenLoveMaggie
博客等级 码龄16年 10粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值