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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch——快速入门

从零基础的内容开始介绍Elasticsearch,主要包含以下内容: Elasticsearch的定义、优点,以及典型的业务场景。Elasticsearch中重要的概念。Elasticsearch典型的接入方式。安装Elasticsearch。使用Kibana调试Elasticsearch。Elasticsearch节点的…

保护IP地址免受盗用的有效方法

IP地址是互联网通信的基础,然而,由于其重要性,IP地址的盗用成为一种潜在的网络威胁。本文将深入探讨防止IP地址被盗用的方法,以维护网络的安全性。 第一部分:IP地址盗用的威胁与风险 1.1 IP地址盗用的定义 IP地址盗…

软件测试必备的测试工具清单汇总

前言 据统计,中国软件外包市场的潜力和机会已远远超过软件王国印度,不过由于软件人才的严重不足致使我国软件发展遭遇“瓶颈”。国家为了大力培养软件人才,不断采取积极有效的措施。我国对软件测试人才的需求数量还将持续增加,因…

【MAC】M2 安装docker 与 mysql

一、docker下载地址 下载地址 二、安装docker完成 罗列一下docker常用命令 # 查看docker版本 docker --version# 拉取镜像 docker pull 镜像名# 查看当前所有镜像 docker images# 查看运行中的容器 docker ps -a docker ps grep| 镜像名#镜像启动操作: sudo dock…

使用单向链表实现栈的相关操作【1.2】

创建节点: class StackNode {private StackNode next;private int no;public StackNode getNext() {return next;}public void setNext(StackNode next) {this.next next;}public StackNode(int no) {this.no no;}public int getNo() {return no;}public void setNo(int no)…

Day65力扣打卡

打卡记录 寻找峰值 II&#xff08;二分&#xff09; 链接 class Solution:def findPeakGrid(self, mat: List[List[int]]) -> List[int]:l, r 0, len(mat) - 1while l < r:mid (l r) // 2mx max(mat[mid])if mx > mat[mid 1][mat[mid].index(mx)]:r midelse:l…

linux搭建gitlab

gitlab的介绍 区别于github&#xff0c;github是面向互联网基于git实现的代码托管平台&#xff0c;gitlab是基于Ruby语言实现的git管理平台软件&#xff0c;一般用于公司内部代码仓库。 gitlab组成 gitlab组成 Nginx 静态Web服务器Gitlab-workhorse 轻量级的反向代理服务器Git…

五年一贯专转本这么管用的记忆法你用了吗?

在枯燥无聊的学习当中&#xff0c;能有好的学习记忆方式就能事半功倍&#xff0c;但是怎样的学习记忆方式才适合我们呢&#xff1f;那我今天就给大家介绍一下吧&#xff0c;如果觉得好用&#xff0c;可以试试&#xff0c;让我们在之后的转本考试当中能有个好成绩&#xff01;zb…

R10在工业自动化-485转WiFi无线路由解决方案

R10是钡铼技术有限公司研发的一款用于工业自动化应用的485转WiFi无线路由器解决方案。该解决方案可以将传统的RS485通信设备无线化&#xff0c;实现数据的远程监控和管理。下面将详细介绍R10在工业自动化中的应用。 首先&#xff0c;R10具备RS485转WiFi的功能&#xff0c;可以…

Apache CouchDB 垂直权限绕过漏洞 CVE-2017-12635 已亲自复现

Apache CouchDB 垂直权限绕过漏洞 CVE-2017-12635 已亲自复现 漏洞名称影响版本影响版本 漏洞复现环境搭建漏洞利用 总结 漏洞名称 影响版本 Apache CouchDB是一个开源的NoSQL数据库&#xff0c;专注于易用性和成为“完全拥抱web的数据库”。它是一个使用JSON作为数据存储格式…

uni-app 用于开发H5项目展示饼图,使用ucharts 饼图示例

先下载ucharts H5示例源码&#xff1a; uCharts: 高性能跨平台图表库&#xff0c;支持H5、APP、小程序&#xff08;微信小程序、支付宝小程序、钉钉小程序、百度小程序、头条小程序、QQ小程序、快手小程序、360小程序&#xff09;、Vue、Taro等更多支持canvas的框架平台&#…

前端开发新趋势:Web3、区块链和虚拟现实

目录 前言 Web3&#xff1a;下一代互联网 区块链技术 去中心化应用程序&#xff08;DApps&#xff09; 区块链&#xff1a;重塑数字世界 数字钱包 NFT&#xff08;非同质化代币&#xff09; 虚拟现实&#xff1a;沉浸式体验 WebVR和WebXR 三维图形 新挑战与机会 性…