java继承Thead类和实现Runnable接口创建线程的区别
一、继承Thread类创建多线程
public class Demo{public static void main(String[] args) {MyThread thread = new MyThread();thread.start();}}
class MyThread extends Thread{@Overridepublic void run() {//子线程执行的操作}
}
注意:开启子线程要调用start()方法而不是调用run方法
二、实现Runnable接口创建多线程
public class Demo{public static void main(String[] args) {Thread thread = new Thread(new MyRunnable());thread.start();}}
class MyRunnable implements Runnable{@Overridepublic void run() {//子线程执行的操作}
}
第二种方式相对于第一种方式有哪些优势:
1、避免java单继承带来的局限性(第一种方式继承Thread类后就不能继承别的类,从而给程序扩展带来不便)
2、第一种方式不能实现线程类变量共享,而第二种方式可以,例如下面这种情况
public class Demo{public static void main(String[] args) {MyThread thread1 = new MyThread();MyThread thread2 = new MyThread();MyThread thread3 = new MyThread();thread1.start();thread2.start();thread3.start();}}
class MyThread implements Thread{int count = 10;@Overridepublic void run() {//子线程执行的操作count--;}
}
由于不同的线程对象,有不同的内存副本,导致count–只是操作当前线程对象中的count不会影响其他线程,从而导致无法共享变量。
改进方式如下
public class Demo{public static void main(String[] args) {MyRunnable runnable = new MyRunnable();Thread thread1 = new Thread(runnable);Thread thread2 = new Thread(runnable);Thread thread3 = new Thread(runnable);thread1.start();thread2.start();thread3.start();}}
class MyRunnable implements Runnable{int count = 10;@Overridepublic void run() {//子线程执行的操作count --;}
}
上面代码实现了count变量的共享,但要注意线程安全问题
相关文章:
java继承Thead类和实现Runnable接口创建线程的区别
一、继承Thread类创建多线程 public class Demo{public static void main(String[] args) {MyThread thread new MyThread();thread.start();}} class MyThread extends Thread{Overridepublic void run() {//子线程执行的操作} }注意:开启子线程要调用start()方法…...
interface Ref<T = any> 这是什么写法?为什么写接口还需要加上<T = any>
问: export interface Ref<T any> { value: T [RefSymbol]: true } 这里既然是interface接口,为什么还有<T any>这是什么意思? 回答: <T any> 中的 <T> 表示这是一个泛型参数,它可以在接口中作为类型的占位符,在实际…...
深入探索 MongoDB GridFS:高效大文件存储与管理的全面指南
GridFS 是 MongoDB 的一个规范,用于存储和检索超过 BSON 文档大小限制(16MB)的文件。与传统的文件系统不同,GridFS 可以将一个大文件分割成多个小块,并存储在 MongoDB 的两个集合中:fs.files 和 fs.chunks。…...
基于CentOS Stream 9平台 安装/卸载 Redis7.0.15
已更正systemctl管理Redis服务问题 1. 官方下载地址 https://redis.io/downloads/#redis-downloads 1.1 下载或上传到/opt/coisini目录下: mkdir /opt/coisini cd /opt/coisini wget https://download.redis.io/releases/redis-7.0.15.tar.gz2. 解压 tar -zxvf re…...
激励-保健理论和公平理论
激励-保健理论 herzberg的激励-保健理论中,保健因素是context of a job,激励因素是content of a job。 context of a job是受组织控制的因素,比如工作条件,基本工资,公司政策等,个人无法支配。content of…...
深入探索 Spring Boot 自定义启动画面
目录 引言什么是 Spring Boot 启动画面Spring Boot 默认启动画面为什么要自定义启动画面如何自定义 Spring Boot 启动画面 修改配置文件使用 Banner 接口通过图片实现启动画面ASCII 艺术画的应用 进阶:基于环境变量的动态 Banner多模块项目中的启动画面Spring Boot…...
Redis实战—Redis分布式锁
本博客为个人学习笔记,学习网站与详细见:黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于Redis的分布式锁 Redis锁代码实现 修改业务代码 分布式锁误删问题 分布式锁原子性问题 Lua脚本 编写脚本 代码优化 总结 分布式锁介绍…...
联想Y7000P 2023款拆机教程及升级内存教程
0.电脑参数介绍 联想Y7000P 2023电脑,笔者电脑CPU为i7-13700H,14核20线程;标配内存为三星的DDR5-5600MHz-8GB*2,由于电脑CPU限制,实际内存跑的频率为5200MHz; 2个内存插槽,2个固态硬盘插槽。每个内存插槽最…...
开发常用依赖
目录 代理对象 Swagger Web 单元测试 MybatisPlus Lombok Mysql SpringBoot Jdk SpringCloud 数据库驱动包 hutool工具 配置仓库 通用库 maven插件 nacos注册中心 OpenFeign Spring AMQP JSON转换器 Redis 邮箱验证 Redisson分布式锁 客户端 代理对象 &l…...
【区分vue2和vue3下的element UI Empty 空状态组件,分别详细介绍属性,事件,方法如何使用,并举例】
在 Element UI(为 Vue 2 设计)和 Element Plus(为 Vue 3 设计)中,Empty(空状态)组件通常用于在数据为空或没有内容时向用户展示一种占位提示。然而,需要注意的是,Element…...
【AI作曲】毁掉音乐?早该来了!一个网易音乐人对于 AI 大模型音乐创作的思辨
引言:AI在创造还是毁掉音乐? 正如当初 midjourney 和 StableDiffusion 在绘画圈掀起的风波一样,suno 和 各大音乐大模型的来临,其实早该来了。 AI 在毁掉绘画?或者毁掉音乐? 没错,但也错了。…...
RabbitMQ实践——最大长度队列
大纲 抛弃消息创建最大长度队列绑定实验 转存死信创建死信队列创建可重写Routing key的最大长度队列创建绑定关系实验 在一些业务场景中,我们只需要保存最近的若干条消息,这个时候我们就可以使用“最大长度队列”来满足这个需求。该队列在收到消息后&…...
【pytorch02】手写数字问题引入
1.数据集 现实生活中遇到的问题 车牌识别身份证号码识别快递单的识别 都会涉及到数字识别 MNIST(收集了很多人手写的0到9数字的图片) 每个数字拥有7000个图像train/test splitting:60k vs 10k 图片大小28 28 数据集划分成训练集和测试集合的意义…...
【查看显卡信息】——Ubuntu和windows
1、VMware虚拟机 VMware虚拟机上不能使用CUDA/CUDNN,也安装不了显卡驱动 查看显卡信息: lspci | grep -i vga 不会显示显卡信息,只会输出VMware SVGA II Adapter,表示这是一个虚拟机,无法安装和使用显卡驱动 使用上…...
在 RK3568 上构建 Android 11 模块:深入解析 m、mm、mmm 编译命令
目录 Android 编译系统概述编译命令简介 环境准备使用 m、mm、mmm 编译模块编译整个源码树编译单个模块编译指定目录下的模块 高级应用并行编译清理编译结果编译特定配置 在 Android 开发中,特别是在 RK3568 这样的高性能平台上,有效地编译和管理模块是确…...
实战|YOLOv10 自定义目标检测
引言 YOLOv10[1] 概述和使用自定义数据训练模型 概述 由清华大学的研究团队基于 Ultralytics Python 包研发的 YOLOv10,通过优化模型结构并去除非极大值抑制(NMS)环节,提出了一种创新的实时目标检测技术。这些改进不仅实现了行业领…...
TTS前端原理学习 chatgpt生成答案
第一篇文章学习 小绿鲸阅读器 通篇使用chatgpt生成答案 文章: https://arxiv.org/pdf/2012.15404 1. 文章概述 本文提出了一种基于Distilled BERT模型的统一普通话文本到语音前端模块。该模型通过预训练的中文BERT作为文本编码器,并采用多任务学习技术…...
AI“音乐创作”横行给音乐家带来哪些隐忧
近日,200多名国际乐坛知名音乐人联署公开信,呼吁AI开发者、科技公司、平台和数字音乐服务商停止使用人工智能(AI)来侵犯并贬低人类艺术家的权利,具体诉求包括,停止使用AI侵犯及贬低人类艺术家的权利,要求…...
SolidityFoundry 安全审计测试 Delegatecall漏洞2
名称: Delegatecall漏洞2 https://github.com/XuHugo/solidityproject/tree/master/vulnerable-defi 描述: 我们已经了解了delegatecall 一个基础的漏洞——所有者操纵漏洞,这里就不再重复之前的基础知识了,不了解或者遗忘的可…...
【字符串 状态机动态规划】1320. 二指输入的的最小距离
本文涉及知识点 动态规划汇总 字符串 状态机动态规划 LeetCode1320. 二指输入的的最小距离 二指输入法定制键盘在 X-Y 平面上的布局如上图所示,其中每个大写英文字母都位于某个坐标处。 例如字母 A 位于坐标 (0,0),字母 B 位于坐标 (0,1)࿰…...
Pydantic序列化避坑大全:从‘按声明类型序列化’到灵活exclude/include的5个常见误区
Pydantic序列化深度避坑指南:从类型陷阱到安全控制的实战解析 深夜调试代码时,你是否遇到过这样的场景:明明在内存中完整的对象,通过API返回给前端时却莫名丢失了关键字段?或者当你在日志中打印包含敏感信息的模型时&a…...
原生AI助手架构解析:从上下文感知到本地化部署的工程实践
1. 项目概述:一个“原生”的AI助手意味着什么?最近在GitHub上看到一个挺有意思的项目,叫natively-cluely-ai-assistant。光看这个名字,就透着一股“原教旨主义”的味道。在AI工具满天飞、各种套壳应用层出不穷的今天,一…...
Windows驱动存储管理终极指南:DriverStore Explorer高效清理系统驱动垃圾
Windows驱动存储管理终极指南:DriverStore Explorer高效清理系统驱动垃圾 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer Windows驱动存储管理是系统管理员和高级用户面临的…...
STM32F103C8T6最小系统板避坑指南:从ST-LINK接线到Keil5乱码,新手必看的5个实战问题
STM32F103C8T6最小系统板避坑指南:从ST-LINK接线到Keil5乱码,新手必看的5个实战问题 第一次点亮STM32开发板的LED时,那种成就感就像电子工程师的"成人礼"。但通往成功的路上往往布满荆棘——接错一根线可能导致整晚的调试失败&…...
张琦(新商业架构师)成功的核心步骤 + 关键心法
张琦(新商业架构师)成功的核心步骤 关键心法,和李一舟完全不同,她走的是认知升维+天地人网全域流量+击穿单点+长期复利路线,全是可落地、能直接照做的干货。 一、张琦成功的底层逻辑…...
职场新人不会写自我介绍?3分钟AI生成直接拿面试
刚步入职场的新人,写简历是不是最怕碰到“自我评价”或“自我介绍”这一栏?盯着空白屏幕憋了一下午,最后只能干巴巴地敲下“性格开朗、吃苦耐劳、具有团队合作精神”这种假大空的话。好不容易搞定简历投递出去,结果总是石沉大海&a…...
单传感器肌电假肢:DTW算法实现92%识别准确率
1. 项目概述肌电假肢技术在过去几十年里取得了显著进展,但传统多传感器系统的高成本和复杂性仍然是阻碍其普及的主要障碍。作为一名从事生物医学工程研究多年的从业者,我一直在寻找更经济高效的解决方案。这项研究提出了一种创新方法:仅使用单…...
CircuitFusion:多模态融合技术在芯片设计PPA预测中的应用
1. CircuitFusion:硬件设计领域的多模态融合革命在芯片设计领域,RTL(寄存器传输级)到GDSII(物理版图)的转换过程一直面临着"预测鸿沟"的挑战。传统EDA工具通常在完成逻辑综合后才能准确评估时序、…...
彻底告别Row-By-Row:标量子查询外连接改写与向量化引擎深潜
在实际的复杂业务系统开发与运维中,SQL查询的结构往往会随着业务复杂度的提升而变得臃肿不堪。为了保证代码的可读性和逻辑的直观性,开发者非常喜欢使用 CTE(公共表表达式)、多层子查询、窗口函数,以及标量子查询&…...
我给 Codex 加上 Superpowers 和 OpenSpec 后,才开始真正理解 AI Coding 工作流
上一篇我写了 Codex 怎么参与 Good Plan 的开发过程。 那篇文章里,我真正想说的不是“Codex 帮我写了多少代码”,而是另一个感受:AI coding 真的进入项目以后,最考验人的地方,往往不是写代码本身,而是问题…...
