JAVAEE初阶 多线程进阶(一)

进阶面试题

    • 一. 锁拓展
      • 1.1 乐观锁与悲观锁
      • 1.2 轻量级锁与重量级锁
      • 1.3 自旋锁和挂起等待锁
      • 1.4 普通互斥锁与读写锁
      • 1.5 公平锁与非公平锁
      • 1.6 可重入锁和不可重入锁
    • 二.锁的优化策略
      • 2.1 锁的自适应
      • 2.2 锁消除
      • 2.3 锁粗化
    • 三.CAS

一. 锁拓展

1.1 乐观锁与悲观锁

乐观锁 : 加锁前,预估产生锁冲突的概率不大,在加锁的过程中不会做太多工作, 加锁的速度快, 但是会消耗很多的CPU资源.
悲观锁 : 加锁前, 预估产生所冲突的概率较大,在加锁的过程中做很多工作,加锁的速度慢.整个过程中不易产生其他问题,

1.2 轻量级锁与重量级锁

轻量级锁 : 加锁的开销小, 加锁的速度快 同时也是乐观锁
重量级锁: 加锁的开销大, 加锁的速度慢

1.3 自旋锁和挂起等待锁

自旋锁 : 加锁的时候,有一个while循环,加锁成功,循环结束, 如果不成功, 一直循环,再次尝试获取到锁 是一种乐观锁
挂起等待锁: 直接放弃争夺CPU. 是一种重量级锁, 也是悲观锁.

1.4 普通互斥锁与读写锁

普通互斥锁 : 类似于 synchronized锁
读写锁 : 分为加读锁 和 加写锁
读锁和读锁之间不会发生所冲突 读锁和写锁 写锁和写锁之间会发生锁冲突
简而言之就是 一个线程在读的时候,另一个线程只能读 不能写
一个线程在写的时候 另一个线程 不能读 也不能写

1.5 公平锁与非公平锁

公平锁 : 在发明公平锁的人的角度讲, 要遵守先来后到 才是公平
非公平锁

1.6 可重入锁和不可重入锁

可重入锁 : 一个线程,连续对同一个锁对象加锁两次,而不会产生死锁
不可重入锁 : 会产生死锁

二.锁的优化策略

2.1 锁的自适应

偏向锁 ------ 轻量级锁 -------- 重量级锁

偏向锁阶段 : 类似于懒汉模式, 能晚加锁就晚加锁 能不加锁就不加锁 , 偏向锁不是真正加锁, 而是加上一个轻量级的标记 , 一旦有线程来竞争锁, 就会升级到轻量级锁阶段, 偏向锁在没有锁竞争的时候效率极高,

轻量级锁阶段 : 通过自旋锁的方式来实现, 在第一时间检测到有线程释放锁, 就会第一时间拿到锁 缺点: 消耗CPU资源 , 当发现竞争锁的线程增多的时候,就会升级到重量级锁

重量级锁阶段 : 拿不到锁的线程不会自旋, 而是 挂起等待 , 主动让出CPU资源

2.2 锁消除

编译器发现 没有涉及到线程安全问题的代码 就会直接把锁消除.

2.3 锁粗化

把多个细粒度的锁 合成 一个 粗粒度的锁
所谓的细粒度和粗粒度, synchronized 大括号内的代码越多, 粒度越粗

三.CAS

CAS 称为 compare and swap 比较并交换

在这里插入图片描述

有两个寄存器的值, 用一个寄存器中的值和内存中的值比较
如果相等 , 就交换内存的值和另一个寄存器中的值
如果不相同 return false

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux IO模式之io_uring

1. 概述 作为科普性质的文章,在介绍 io_uring 之前,我们可以先整体看一下 linux 的 IO 模型大体有哪些类型。 图 1.1 从图 1.1 中可以看出,linux 的 IO 主要可以分为两个大类,而我们今天要介绍的 io_uring 就属于其中的 kernel …

从零开始构建高效的网校平台:在线教育系统源码的开发指南

随着科技的不断发展,在线教育在现代社会中变得愈发重要。本文将为您提供一份详尽的指南,从零开始构建高效的网校平台,覆盖在线教育系统源码的关键开发步骤。 第一步:明确需求和目标 在开始之前,明确您的网校平台的需…

vue看板使用电子数字

1、下载字体 https://www.dafont.com/theme.php?cat302&text0123456789 2、下载后将压缩包解压,并上传到https://link.csdn.net/?targethttps%3A%2F%2Fwww.fontsquirrel.com%2Ftools%2Fwebfont-generator 然后下载 3、项目中使用 在Vue项目中的assets中新建fonts文件夹…

k8s集群内部署nexus

一、前言 在k8s集群中部署nexus服务需要使用到pv、pvc服务来存储nexus的数据,需要使用service服务来提供对外访问nexus服务的端口,需要使用deployment服务来管理nexus服务,接下来就是用这些服务来在k8s集群中搭建nexus,pv服务使用…

系统设计——系统安全

HTTPS 是如何工作的? 安全超文本传输​​协议(HTTPS)是超文本传输​​协议(HTTP)的扩展。HTTPS 使用传输层安全性(TLS)传输加密数据。如果数据在网上被劫持,劫持者得到的只是二进制…

IDEA tomcat内存不足

-Xms256m -Xmx256m -XX:MaxNewSize256m -XX:MaxPermSize256m

密码明文传输漏洞 原理以及修复方法

漏洞名称 : 密码明文传输 漏洞描述 : 密码明文传输一般存在于web网站登录页面,用户名或者密码采用了明文传输,容易 被嗅探软件截取。 检测条件 :1、 已知Web网站具有登录页面。 检测方法: 1、 找到网站或者web系统登录页面。…

c jpeg 理论霍夫曼 DC AC表,c程序实现正向逆向转换

此4张表是理论表,不是针对某张图片的特定表。如程序不统计生成某图片的专用霍夫曼表,应该也可用理论表代用。 1.亮度DC表 左边第一列是二进制位数,就是对此位数编码 中间一列是生成比特流的位数,右边是生成的比特流。 2.色度DC…

NFTScan | 12.11~12.17 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2023.12.11~ 2023.12.17 NFT Hot News 01/ Pudgy Penguins 衍生 NFT Lil Pudgys 过去一天成交量超 1000 枚 ETH,位居第二 12 月 11 日,据 OpenSea 数据显示&#…

智慧养老:创新科技让老年生活更美好

智慧养老:创新科技让老年生活更美好 随着人口老龄化的加剧,智慧养老成为了关注焦点。智慧养老以创新科技为核心,旨在改善老年人的生活品质、促进健康、增强安全感和社会融入感。本文将详细介绍智慧养老的关键技术和应用场景,带您了…

Java中Exception的使用方法

Exception介绍异常处理机制的优缺点常见的Exception异常处理的常见错误优雅的处理异常异常处理中存在的性能问题Java自定义异常示例 Exception介绍 在Java中,异常(Exception)是一种特殊类型的对象,表示程序运行过程中发生的意外或…

未来医疗的新希望:人工智能与智能器官的奇妙融合

导言 人工智能技术的不断演进在医疗领域掀起了一场革命。随着智能器官与人工智能的深度融合,虽然医学领域迎来了前所未有的机遇,但同时也伴随着一系列潜在的问题与挑战。本文将深入探讨人工智能如何与智能器官相互融合,为医学带来新的治疗可能…

构建健康中国:医保支付购药系统的技术实现

在数字化时代,医保支付购药系统的技术实现成为医疗保障体系不可或缺的一环。通过整合医疗资源、优化服务流程,这一系统为患者提供了更便捷、高效的医疗服务。本文将深入探讨医保支付购药系统的技术架构与实现方法。 1. 技术架构概述 医保支付购药系统…

服务器数据恢复-raid5故障导致上层分区无法访问的数据恢复案例

服务器数据恢复环境&故障: 一台服务器上3块硬盘组建了一组raid5磁盘阵列。服务器运行过程中有一块硬盘的指示灯变为红色,raid5磁盘阵列出现故障,服务器上层操作系统的分区无法识别。 服务器数据恢复过程: 1、将故障服务器上磁…

【九】python模板方法模式

文章目录 9.1 模板方法模式概述9.2 代码示例9.3 模板方法模式的UML图9.4 模板方法模式的优点和缺点9.4.1 模板方法模式提供以下优点:9.4.2 模板方法模式的缺点如下: 9.1 模板方法模式概述 模板方法模式是一种行为设计模式,它使用一个抽象的基类定义了一个操作中的算…

为什么网站需要SSL证书?

在当今数字化的世界里,网站安全性已经成为互联网用户关注的重点。SSL证书(Secure Sockets Layer)作为一种安全技术,已经成为保障网站安全性的基本工具。下面让我们来看看为什么网站需要SSL证书以及安装后的各种好处。 永久免费SS…

vp与vs联合开发-通过CogAcqFifoTool工具连接相机

1.完成相机硬件配置后 2.完成vp与vs联合开发配置功能后 1.创建winform 项目 目的 : 搭建 界面应用 2. 1. vpp文件存入 项目的debug 目录中 目的: 在项目中加载本地vpp文件 读取相机工具 1.控件CogRecordDisplay 用于显示相机拍摄照片和实施显示的窗口 2和3 …

HarmonyOS(十五)——状态管理之@Prop装饰器(父子单向同步)

上一篇文章我们认识了状态管理的State装饰器(组件内状态),接下来我们学习另外一个状态管理装饰器Prop装饰器。 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的,但是变化不会同步回其父组件。 说明&#…

Android的基础开发

基础开发 listView ListView就是列表条目&#xff0c;可以向下滚动&#xff0c;也可以点击。 首先设置两个视图布局 activity_main2.xml【充当容器{ListView}】 <ListViewandroid:layout_width"match_parent"android:layout_height"match_parent"a…

GO 的 socks5代理 编写

这里学习一下 socks5 代理的编写 网上有很多 学习一下 go 语言实战入门案例之实现Socks5 - 知乎 滑动验证页面 socks5协议原理学习-腾讯云开发者社区-腾讯云 (tencent.com) 首先我们要了解一下socks5的代理方式 socks5 是基于 认证建立连接转发数据 所形成的代理 我们只…