
锁
zl1zl2zl3
这个作者很懒,什么都没留下…
展开
-
Synchronized 天天用,实现原理你懂吗?
来源:小小木的博客www.cnblogs.com/wyc1994666/p/11748212.htmlSynchronized关键字算是Java的元老级锁了,一开始它撑起了Java的同步任务,其用法简单粗暴容易上手。但是有些与它相关的知识点还是需要我们开发者去深入掌握的。比如,我们都知道通过Synchronized锁来实现互斥功能,可以用在方法或者代码块上,那么不同用法都是怎么实现的,以及都经历了了哪些优化等等问题都需要我们扎实的理解。 1.基本用法 2.实现原理 ...转载 2020-08-21 14:18:18 · 275 阅读 · 0 评论 -
一文带你了解 MySQL 中的各种锁机制!
作者 |suveng来源 |blog.youkuaiyun.com/qq_37933685/article/details/80717515MySQL中的锁机制,按粒度分为行级锁,页级锁,表级锁,其中按用法还分为共享锁和排他锁.行级锁行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁和排他锁.特点开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。...转载 2020-08-19 22:41:03 · 200 阅读 · 0 评论 -
无锁缓存,每秒10万并发,究竟如何实现?
有一类业务场景:(1)超高吞吐量,每秒要处理海量请求;(2)写多读少,大部分请求是对数据进行修改,少部分请求对数据进行读取;这类业务,有什么实现技巧么?接下来,一起听我从案例入手,娓娓道来。快狗打车,场景举例:(1)司机地理位置信息会随时变化,可能每几秒钟地理位置要修改一次;(2)用户打车的时候查看某个司机的地理位置,查询地理位置的频率相对较低;这里要用到两个接口:(1)大量修改司机信息:void SetDriverInfo(long driver_id, Drive转载 2020-08-19 15:07:43 · 363 阅读 · 0 评论 -
高并发场景下锁的使用技巧
来源:33h.co/dVMB如何确保一个方法,或者一块代码在高并发情况下,同一时间只能被一个线程执行,单体应用可以使用并发处理相关的 API 进行控制,但单体应用架构演变为分布式微服务架构后,跨进程的实例部署,显然就没办法通过应用层锁的机制来控制并发了。那么锁都有哪些类型,为什么要使用锁,锁的使用场景有哪些?今天我们来聊一聊高并发场景下锁的使用技巧。锁类别不同的应用场景对锁的要求各不相同,我们先来看下锁都有哪些类别,这些锁之间有什么区别。 悲观锁(synchronize) .转载 2020-07-23 13:37:23 · 481 阅读 · 0 评论 -
聊聊大厂面试官必问的 MySQL 锁机制
前言前几天有粉丝和我聊到他找工作面试大厂时被问的问题,因为现在疫情期间,找工作也特别难找。他说面试的题目也比较难,都偏向于一两年的工作经验的面试题。他说在一面的时候被问到Mysql的面试题,索引那块自己都回答比较满意,但是问到Mysql的锁机制就比较懵了。因为平时没有关注Mysql的锁机制,当被问到高并发场景下锁机制是怎么保证数据的一致性的和事务隔离性的。他把他面试的过程分享给了我,Mysql高并发锁机制的问题,几乎面大厂都有被问到,Mysql怎么在高并发下控制并发访问的?我细想了一下,转载 2020-06-27 22:45:33 · 394 阅读 · 0 评论 -
问懵逼:请站在 JVM 角度谈谈 Java 的锁?
并发是从JDK 5升级到JDK 6后一项重要的改进项,HotSpot虚拟机开发团队在这个版本上花费了大量的资源去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、锁消除(Lock Elimination)、锁膨胀(Lock Coarsening)、轻量级锁(Lightweight Locking)、偏向锁(Biased Locking)等,这些技术都是为了在线程之间更高效地共享数据及解决竞争问题,从而提高程序的执行效率 .存在的问题对于最开始 (JDK1.5之前), Jav.转载 2020-05-12 13:29:09 · 446 阅读 · 0 评论 -
深入Lock锁底层原理实现,手写一个可重入锁
synchronized与locklock是一个接口,而synchronized是在JVM层面实现的。synchronized释放锁有两种方式: 获取锁的线程执行完同步代码,释放锁 。 线程执行发生异常,jvm会让线程释放锁。 lock锁的释放,出现异常时必须在finally中释放锁,不然容易造成线程死锁。lock显式获取锁和释放锁,提供超时获取锁、可中断地获取锁。sy...转载 2020-04-22 21:06:46 · 646 阅读 · 0 评论 -
一条简单的更新语句,MySQL是如何加锁的?
看如下一条sql语句:#tableT(idint,namevarchar(20))deletefromTwhereid = 10;MySQL在执行的过程中,是如何加锁呢?在看下面这条语句:select*fromTwhereid=10;那这条语句呢?其实这其中包含太多知识点了。要回答这两个问题,首先需要了解一些知识。相关知识介绍多...转载 2020-04-20 14:10:17 · 421 阅读 · 0 评论 -
面试必问!有没有比读写锁更快的锁?
面试三连面试官:了解锁吗?小明:了解,还经常用过。面试官:说说synchronized和lock的区别吧小明:synchronized是可重入锁,由于lock是一个接口,重入性取决于实现,synchronized不支持中断,而lock可以。。。。。。。。。。。。。。。。面试官:好了,那有没有比这两种锁更快的锁呢?小明:在读多写少的情况下,读写锁比他们的效率更高。面试官:...转载 2020-04-16 15:35:19 · 316 阅读 · 0 评论 -
如何基于 String 实现同步锁?
作者:等你归去来https://www.cnblogs.com/yougewe/p/11573911.html如何基于String实现同步锁?在某些时候,我们可能想基于字符串做一些事情,比如:针对同一用户的并发同步操作,使用锁字符串的方式实现比较合理。因为只有在相同字符串的情况下,并发操作才是不被允许的。而如果我们不分青红皂白直接全部加锁,那么整体性能就下降得厉害了。因为St...转载 2020-04-13 18:20:36 · 228 阅读 · 0 评论 -
Java中有哪些无锁技术来解决并发问题?如何使用?
除了使用 synchronized、Lock 加锁之外,Java 中还有很多不需要加锁就可以解决并发问题的工具类一、原子工具类JDK 1.8 中,java.util.concurrent.atomic 包下类都是原子类,原子类都是基于 sun.misc.Unsafe 实现的。CPU 为了解决并发问题,提供了 CAS 指令,全称 Compare And Swap,即比较并交互 CA...转载 2020-03-19 09:56:09 · 276 阅读 · 0 评论 -
「基本功」不可不说的Java“锁”事
并发编程是Java程序员必备基本功,今天“基本功”专栏向大家推荐一篇深入解析Java锁机制的文章。Enjoy!前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行...转载 2020-03-19 09:51:05 · 436 阅读 · 0 评论 -
活锁,也许你需要了解一下
前两天看极客时间Java并发课程的时候,刷到一个概念:活锁。死锁,倒是不陌生,活锁却是第一次听到。在介绍活锁之前,我们先来复习一下死锁。下面的例子模拟一个转账业务,多线程环境,为了账户金额安全,对账户进行了加锁。 1publicclassAccount{ 2publicAccount(intbalance,Stringcard){ 3thi...转载 2020-03-04 21:58:24 · 1719 阅读 · 0 评论 -
8 种方案解决重复提交问题!你选择哪一种呀?
1.什么是幂等在我们编程中常见幂等 select查询天然幂等 delete删除也是幂等,删除同一个多次效果一样 update直接更新某个值的,幂等 update更新累加操作的,非幂等 insert非幂等操作,每次新增一条 2.产生原因由于重复点击或者网络重发 eg: 点击提交按钮两次; 点击刷新按钮; 使用浏览...转载 2020-01-08 16:43:51 · 300 阅读 · 0 评论 -
并发控制--悲观锁和乐观锁详解
背景考虑下面两个并发带来的问题:1、丢失更新:一个事务的更新结果覆盖了其它事务的更新结果,即所谓的更新丢失。2、脏读:当一个事务读取其它完成一半事务的记录时,就会发生脏读取。例如:两个用户同时修改商品库存表,A、B同时进入,看到的库存都是100,A购买一件把库存修改为99(100-1)。此时B购买两件把库存修改为98(100-2),因为A、B同时读到的库存都是100,B...转载 2018-11-05 10:32:20 · 392 阅读 · 0 评论 -
java ReentrantLock 实现原理
使用 synchronized 来做同步处理时,锁的获取和释放都是隐式的,实现的原理是通过编译后加上不同的机器指令来实现。而 ReentrantLock 就是一个普通的类,它是基于 AQS(AbstractQueuedSynchronizer)来实现的。是一个重入锁:一个线程获得了锁之后仍然可以反复的加锁,不会出现自己阻塞自己的情况。AQS 是 Java 并发包里实现锁、同步的一个重...转载 2018-08-30 08:50:56 · 2219 阅读 · 0 评论 -
synchronized 关键字原理
众所周知 synchronized 关键字是解决并发问题常用解决方案,有以下三种使用方式:同步普通方法,锁的是当前对象。 同步静态方法,锁的是当前 Class 对象。 同步块,锁的是 () 中的对象。实现原理: JVM 是通过进入、退出对象监视器( Monitor )来实现对方法、同步块的同步的。具体实现是在编译之后在同步方法调用前加入一个 monitor.enter 指令,在退出方...转载 2018-08-29 11:35:24 · 281 阅读 · 0 评论 -
死磕Synchronized底层实现--偏向锁
注:本篇很长,请找个舒适的姿势阅读。 本文为synchronized系列第二篇。主要内容为分析偏向锁的实现。偏向锁的诞生背景和基本原理在上文中已经讲过了,强烈建议在有看过上篇文章的基础下阅读本文。更多文章见个人博客:https://github.com/farmerjohngit/myblog本系列文章将对HotSpot的synchronized锁实现进行全面分析,内容包括...转载 2018-12-21 14:45:26 · 1360 阅读 · 0 评论 -
MySQL中的行级锁,表级锁,页级锁
数据库锁是数据库系统中非常重要的一个概念,本文将深入分析数据库中的锁相关知识,您可点击下方音频收听或直接查看文稿中的文字。在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。行级锁行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加...转载 2018-12-21 15:01:33 · 292 阅读 · 0 评论 -
别吵吵,分布式锁也是锁
Tomcat的锁Tomcat是这个系统的核心组成部分, 每当有用户请求过来,Tomcat就会从线程池里找个线程来处理,有的执行登录,有的查看购物车,有的下订单,看着属下们尽心尽职地工作,完成人类的请求,Tomcat就很有成就感。 与此同时,它也很得意,所有的业务逻辑尽在掌握。MySQL算啥!不就是一个保存数据的地方吗? Redis算啥!不就是一个加快速度的缓存吗? 没有他们,我...转载 2019-01-02 10:41:11 · 259 阅读 · 0 评论 -
MySQL InnoDB 锁介绍及不同 SQL 语句分别加什么样的锁
作者:iceman1952(本文来自作者投稿)本文中,我们详细介绍MySQL InnoDB存储引擎各种不同类型的锁,以及不同SQL语句分别会加什么样的锁。阅读提示1. 本文所参考的MySQL文档版本是8.0,做实验的MySQL版本是8.0.132. 本文主要参考了MySQL官方文档 InnoDB锁定和事务机制3. 本文还参考了何登成的 MySQL加锁处理分析、一个最不可思议...转载 2019-01-31 17:38:33 · 857 阅读 · 1 评论 -
10行代码理解Java锁消除
导语:锁消除是Java虚拟机在JIT编译期间,通过对运行上下文的扫描,去除不可能存在共享资源竞争的锁,通过锁消除,可以节省毫无意义的请求锁时间。本文作者举例说明了锁消除,并分析了锁消除的条件,本文适合对于深入了解JVM有兴趣的开发者。问题:我听说JVM会对锁进行优化,所以如果我写了synchronized,JVM会帮我做优化!对吗理论:在当前Java内存模型中,未观察到的锁不能...转载 2019-03-27 19:34:00 · 545 阅读 · 0 评论 -
图文并茂的带你彻底理解悲观锁与乐观锁
这是一篇介绍悲观锁和乐观锁的入门文章。旨在让那些不了解悲观锁和乐观锁的小白们弄清楚什么是悲观锁,什么是乐观锁。不同于其他文章,本文会配上相应的图解让大家更容易理解。通过该文,你会学习到如下的知识。1锁(Lock)在介绍悲观锁和乐观锁之前,让我们看一下什么是锁。锁,在我们生活中随处可见,我们的门上有锁,我们存钱的保险柜上有锁,是用来保护我们财产安全的。程序中也有锁,当多个线程修...转载 2019-05-06 11:25:39 · 407 阅读 · 0 评论 -
java ConcurrentHashMap 实现原理
由于 HashMap 是一个线程不安全的容器,主要体现在容量大于总量*负载因子发生扩容时会出现环形链表从而导致死循环。因此需要支持线程安全的并发容器 ConcurrentHashMap 。JDK1.7 实现数据结构如图所示,是由 Segment 数组、HashEntry 数组组成,和 HashMap 一样,仍然是数组加链表组成。ConcurrentHashMap 采用了分段...转载 2018-08-30 08:54:07 · 422 阅读 · 0 评论