Java的Lock

写在前面

Java本身提供了很多的锁。每种锁因其特性的不同。在不同的场景能展现出不同效率。
Java中往往是按照是否含有某一种特性来定义锁。通过特性将锁分类,再使用对比的方式来看

在这里插入图片描述

1 乐观锁和悲观锁

乐观锁和悲观锁是一种广义上的概念,提现了看待线程同步的不同角度。在Java本身和数据库中都有此概念的应用。
概念的话:对于一个数据的并发操作。悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。
Java中 sync关键字和lock实现类都会悲观锁。

而乐观锁认为自己在使用数据时 不会有别的线程修改数据。所以不会添加锁。只是在更新数据的时候去判断之前有没有别的线程更新了这个数据。如果这个数据没有被更新,当前线程将自己修改的数据成功写入。如果这个数据没有被更新,当前线程将自己修改的数据成功写入。如果已经被更新 就根据不同的实现方式执行不同的操作。报错或者retry

乐观锁在Java中使用无锁编程实现。最常用的就是CAS,Java原子类的increment就是使用CAS自旋实现。

在这里插入图片描述

  • 悲观锁适合写操作多的。先加锁可以保证写操作时数据正确
  • 乐观锁适合读操作多的场景。不加锁的特点能够使其读操作的性能大大提升。
// ------------------------- 悲观锁的调用方式 -------------------------
// synchronized
public synchronized void testMethod() {// 操作同步资源
}
// ReentrantLock
private ReentrantLock lock = new ReentrantLock(); // 需要保证多个线程使用的是同一个锁
public void modifyPublicResources() {lock.lock();

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

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

相关文章

【C++ QT项目3】——网络调试助手的设计与实现

【C QT项目3】——网络调试助手的设计与实现 1 TCP网络调试助手1.1 项目整体开发流程1.2 QTtcp服务器的关键流程1.3 QTtcp客户端的关键流程1.4 UI界面的设计1.5 TCP协议理论知识1.6 Socket网络通信理论 2 网络通信核心代码2.1 TCP服务端连接的核心代码2.2 TCP服务端的数据通信核…

如何使用Pycharm中的image模块以及导入打开图片(属性)

在学习pytorch深度学习的过程中,通常会使用到大量的数据集,包括训练集和测试集。 以下是pytorch加载数据集的流程: 在notebook中使用help方法查看Dataset类的功能以及操作: 使用dataset需要继承Dataset父类 重写__getitem__方法和…

测试开发【Mock平台】12基础:拦截器服务实现(三) 接口匹配逻辑

【Mock平台】为系列测试开发教程,从0到1编码带你一步步使用Spring Boot 和 Antd React框架完成搭建一个测试工具平台,希望作为一个实战项目对各位的测试开发学习之路有帮助,关注公众号发送“mock”获取github项目源码地址,大奇一个…

如何确定分库还是 分表?

分库分表 分库分表使用的场景不一样: 分表因为数据量比较大,导致事务执行缓慢;分库是因为单库的性能无法满足要求。 分片策略 1、垂直拆分 水平拆分 3 范围分片(range) 垂直水平拆分 4 如何解决数据查询问题&a…

数据可视化利器:五款必备工具推荐

在数据可视化的世界里,工具的选择往往决定了工作的效率和效果。作为一名资深的数据可视化用户,我尝试并使用了众多的数据可视化工具。今天,我想向大家推荐五款我认为最好用、最实用的数据可视化工具。 1. 山海鲸可视化 山海鲸可视化以其强大…

ansible剧本中的角色

1 roles角色 1.1 roles角色的作用? 可以把playbook剧本里的各个play看作为一个角色,将各个角色打的tasks任务、vars变量、template模版和copy、script模块使用的相关文件等内容放置在指定角色的目录里统一管理,在需要的时候可在playbook中使…

删除挖矿木马yaya病毒

文章目录 挖矿木马(yaya) 挖矿木马(yaya) 参考文档:解决挖矿 将隐藏内核模块可见 kill -63 0 查看隐藏的内核模块nonono cat /proc/modules |head -n 10 删除内核模块 rmmod nonono 结束挖矿进程 使用top命令查…

浅谈js事件机制

事件是什么?事件模型? 原始事件模型(DOM0级) HTML代码中指定属性值:在js代码中指定属性值:优点:缺点: IE 事件模型DOM2事件模型 对事件循环的理解 宏任务(Macrotasks&…

PWM功能介绍 和配置

泰山派默认提供了3组PWM的GPIO , 为了检测PWM的输出,我们可以配合逻辑分析仪来查看效果,或者搭配STC8的LED灯 PWM 测试 列举所有的PWM设备: # 查找所有有pwm名称的文件 find / -name "pwm" # pwm4: pwmfe6e0000 edp屏幕…

短剧弯道超车拿下2024开年第一爆,谁在打造新的暴富神话?

2024开年第一爆竟然被一部土味小短剧拿下了。 春节期间,无论是刷抖音还是微博,都能看到《我在八零年代当后妈》这部微短剧,女大学生穿越到八十年代当后妈,集狗血、土味、爽点于一体,让人相当上头。 春节档长视频平台爱、优、腾都拿出了当家大戏抢夺剧集市场,没想到被短…

人机工程学和人机交互理论:智能座舱设计

hello家人们...本人熟悉PS、Xd、Ai、Sketch、Figma、墨刀、即时设计、mastergo、Pixso等行业设计软件以及前端开发等技能,拥有10年的UI经验,我们可以通过关注评论私信交流以帮助到您解决UI工作中的烦恼!谢谢 人机工程学与人机交互理论&#x…

Gin框架: HTML模板渲染之配置与语法详解

Gin的HTML模板配置 1 &#xff09;单一目录的配置 配置模板目录&#xff0c;在与main.go同级下, 新建目录&#xff0c;下面二选一&#xff0c;仅作举例, 这里选择 tpls templatestpls 在 tpls 目录下新建 news.html <!-- 最简单的 --> <h1>News Page</h1>&l…