07 |「注解、反射、多线程、锁」

news2024/11/24 6:44:04

前言

函数

文章目录

    • 前言
    • 一、注解
    • 二、反射
      • 1、作用
    • 三、多线程
      • 1、基本概念
      • 2、实现方式
        • 1)继承 Thread 类
        • 2)实现Runnable接口
        • 3、常用 API
    • 四、锁
      • 1、为什么
      • 2、锁

一、注解

  • 注解不影响程序逻辑,但会被编译器在不同阶段(编译、执行)执行;
    例如,@Override 注解会在编译时执行,用来检验代码是否符合规范,给一个函数加上 @Override,如果函数没有重载,就会报编译错误;
  • 注解又被称为元数据,用于修饰包、方法、属性、构造器、局部变量等数据信息;
  • @Override:提示某个函数重写基类的某个函数;
  • @interface:定义一个注解
  • 元注解

二、反射

1、作用

  • Java 编译于运行过程:Java 源码 —(编译)–> Java 字节码 —> 加载类(因为 Java 的代码是由一个一个类组成)—> 执行;
  • 动态地修改某些代码:对于一个大型 Java 项目,当我们想修改其中的一小段代码时,可以通过反射机制只修改这一段代码的逻辑,然后将需改后的代码加到原项目中,无需像 C++ 一样修改一段代码,需要编译整个项目;
  • 项目中某个类需要频繁修改,修改完这个类无需重新打包整个项目,可以在项目中动态加载这个类;

三、多线程

1、基本概念

1)每一个程序都是一个进程;
2)同一时间有多个线程在执行,高效;

2、实现方式

1)继承 Thread 类

  • 每个线程都是一个对象;不同线程的对象是不同的;

  • 遇到 start() 函数会新开一个线程,执行 run();

  • 多个线程执行的顺序是随机的;

2)实现Runnable接口

  • 多个线程可以共用一个对象;

3、常用 API

  • start()
  • Thread.sleep()
  • join():一个线程等待另外一个线程结束;worker1.join(); // 等worker1线程执行完才继续往下执行
  • interrupt():给线程发送一个异常

四、锁

1、为什么

  • 同一个进程的多个线程会共享一段内存空间,会出现读写冲突的问题

统计某个网页页面的某门课的报名人数

  • cnt 统计数量
  • 网站有多个线程执行
  • 每个线程对应 一个人报名成功,cnt = cnt + 1(多线程运行过程中,多个线程在执行这条语句时,并不会某个线程会完整地执行完这个语句再执行下一个线程),多个线程再执行时可能会同时执行这条语句;
  • cnt = cnt + 1:对应三个操作,先取 cnt 的值,再将 cnt + 1,再给 cnt 赋值;
  • 出现的问题:第一个线程取 cnt 的值,此时 cnt 的值为 0,然后被操作系统挂载;第二个线程开始执行,执行完了 3 个操作,第二个线程执行完了,此时 cnt = 1;第一个线程继续执行,执行 cnt + 1(0 + 1 = 1),此时 cnt = 1;导致两个人买完课之后,cnt 的值仍然为 1,出错
  • 出现读写冲突的问题
    • 两个线程同时写一个变量值,会有冲突
    • 一个线程读,另一个线程写,会有冲突(先读再写读的是旧值,先写再读读的是新值,两个线程的读和写是随机的,最终的情况也不是唯一确定的)

2、锁

  • 访问公共资源,在访问之前,先去拿到这个锁将公共资源锁住,同一个锁同一时间只能被一个线程锁定,一个线程拿到这把锁,lock() 其余线程就会被阻塞在这句话上(停止不同),保证此时只能有一个线程访问公共资源。当一个线程处理完成之后,再将这把锁释放掉,unlock()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/792305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【小白必看】利用Python生成个性化名单Word文档

文章目录 前言所需文件及文件格式说明excel数据如下word 模板如下文件目录格式及生成后的文件 导入所需的模块:打开 Excel 文件:选择工作表:获取数据列表:遍历数据并生成 Word 文档:完整代码结束语 前言 对于需要批量…

【Python机器学习】实验03 logstic回归

文章目录 简单分类模型 - 逻辑回归1.1 准备数据1.2 定义假设函数Sigmoid 函数 1.3 定义代价函数1.4 定义梯度下降算法gradient descent(梯度下降) 1.5 绘制决策边界1.6 计算准确率1.7 试试用Sklearn来解决2.1 准备数据(试试第二个例子)2.2 假设函数与前h相同2.3 代价函数与前相…

找不到vcruntime140_1.dll,无法继续执行此代码如何解决

最近我在使用电脑时遇到了一个问题,即出现了vcruntime140_1.dll文件丢失的错误提示。这让我感到非常困惑和烦恼,因为我无法正常运行一些软件和游戏。 vcruntime140_1.dll是一个Windows系统文件,它是Microsoft Visual C Redistributable的一部…

maven本地仓库地址修改+maven国内镜像设置+maven运行所需pos.xml文件配置基本写法

1,maven本地仓库地址修改 maven在使用过程中,本地项目仓库其空间占用会越来越大,但是其默认仓库位置往往是以C盘为主,C盘作为系统盘常常会遇到所在盘空间占满的情况,所以我们将其改至其他硬盘空间位置为适合做法&#…

Vue style中的 scoped 属性

Vue 中存在 scoped 属性,HTML5中也存在一个 scoped 属性,而且,这两者都是针对 css 样式处理的属性,所以很多文章在 解释 Vue scoped 的时候,都会把两者混为一谈,直接进把 HTML5 scoped 的定义搬到 Vue scop…

TikTok带货成功的关键:用户参与与互动

TikTok作为一个社交媒体平台,其带货成功的关键之一是用户参与和互动。在这篇文章中,我们将探讨如何通过激发用户参与和互动,提高TikTok带货的效果。 首先,创造互动性的内容是吸引用户参与的重要因素。在带货视频中,可…

Redis学习路线(1)—— Redis的安装

一、NoSQL SQL VS NoSQL 1、名称 SQL 主要是指关系数据库。NoSQL 主要是指非关系数据库。 2、存储结构 SQL 是结构化的数据库,以表格的形式存储数据。NoSQL 是非结构化的数据库,以Key-Value(Redis),JSON格式文档&…

Linux系统安装Mysql二进制文件

💻前言 为了简化安装和配置过程,许多Linux发行版提供了预编译的二进制MySQL安装包,这些安装包已经经过测试和验证,可以在大多数Linux系统上正常工作。通过安装这些二进制MySQL安装包,可以省去从源代码编译和安装的繁琐…

mysql通过binlog恢复数据

开启binlog 在my.ini中添加以下两行代码: log-binmysql-bin server-id1 注意要写在[mysqld]范围内才会生效 查看binlog存放日志文件目录 show variables like %datadir%; 查看binlog文件名 show master logs; 将binlog转换成sql mysqlbinlog --no-defaults …

个性化-强连接-更智能 伙伴云5大扩展功能详解

伙伴云【小伙开麦】直播间「“伙”速上新」栏目上线,由产品经理讲解产品伙伴云5大功能模块,旨在让业务流程更加清晰、让用户使用操作更加便捷、让业绩转化更高效、让生态连接更顺畅…… 在不断的技术创新过程中,进一步助力数字化转型&#x…

CAN bus off ——ISO11898

什么是can bus off? CAN总线关闭(CAN bus off)是指CAN节点进入一种错误状态,无法继续正常的数据通信。当一个CAN节点的错误计数器超过了设定的阈值时,该节点将进入CAN总线关闭状态。在这种状态下,该节点将停…

opencv-24 图像几何变换03-仿射-cv2.warpAffine()

什么是仿射? 仿射变换是指图像可以通过一系列的几何变换来实现平移、旋转等多种操作。该变换能够 保持图像的平直性和平行性。平直性是指图像经过仿射变换后,直线仍然是直线;平行性是指 图像在完成仿射变换后,平行线仍然是平行线。…

Android 耗时分析(adb shell/Studio CPU Profiler/插桩Trace API)

1.adb logcat 查看冷启动时间和Activity显示时间: 过滤Displayed关键字,可看到Activity的显示时间 那上面display后面的是时间是指包含哪些过程的时间呢? 模拟在Application中沉睡1秒操作,冷启动情况下: 从上可知&…

Python小练习实践

在交互模式下,可以不写print;默认调用 print(repr(a)) 文件模式,必须写print。 If语句 Input语句,返回的是字符串 len(),长度 小练习: 输入一个自己的生日月份 写个if 和else 判断一下当月是否是你的生日…

celery----异步发送短信

1.目录结构 -celery.py --------必须叫这个名字 放定时任务、里面实例化得到app对象 -home_task.py和user_task.py. ----------就是针对不同app的任务文件 2.各文件的内容 celery.py from datetime import timedeltafrom celery import Celery from celery.schedu…

PLL设计-仿真

线性相位裕锁相环模型 out都代表噪声,PFDCP的gain是Icp/2π,LF的传输函数是,VCO传输函数是,分频器增益是1/N 首先不考虑噪声模型 阶跃响应-查看建立时间,下面两条线是上面两条线减1V后的结果,方便查看。 放大上图,输入…

支持向量机(SVM)---代码实现

# coding: utf-8## 感知器模型流程 """1.初始化w, b2.遍历所有训练数据集中选出的误分类点&#xff1a;2.1.如果y ! sign(wxb) 或者 y*(wxb) < 0 则为误分类点2.2 根据误分类点计算&#xff1a;w_new w_old -alpha * 对w的梯度&#xff0c; b_new b_old - …

共聚焦显微镜在光学膜片表面微结构测量中的应用

在当前的液晶显示器行业&#xff0c;TFT液晶面板因其显示反应速度更快更适用于动画及显像显示的特点而得到广泛应用。作为配套组件的背光显示模组&#xff0c;为其供应充足且分布均匀的光源亮度&#xff0c;使得液晶面板的显像功能能够正常工作。液晶面板消费需求的不断增长带动…

【vue3】获取字典数据,封装为公共方法

前言: 后台项目中基本上都有字典管理页面,Vue封装字典数据的主要目的是为了方便数据的管理和使用 不管在哪个页面使用下拉框,el-select的options数据源需要通过调用接口获取到,不同的数据源调用不同的接口,引入和使用都是不小的工作量,如果使用字典数据管理,不管同个页…

(打造透明屏展厅全攻略)如何打造透明OLED显示屏展厅?

透明OLED显示屏是一种具有透明度的显示屏幕&#xff0c;可以在不使用时完全透明&#xff0c;从而实现空间与显示的完美融合。在展厅设计中&#xff0c;透明OLED显示屏可以带来全新的视觉体验&#xff0c;使展品更加生动、立体&#xff0c;展示效果更佳。下面是打造透明OLED显示…