Skip to main content

moregeek program

浅谈自旋锁和 jvm 对锁的优化_crmeb中邦科技的博客-多极客编程

背景先上图由此可见,非自旋锁如果拿不到锁会把线程阻塞,直到被唤醒;自旋锁拿不到锁会一直尝试为什么要这样?好处阻塞和唤醒线程都是需要高昂的开销的,如果同步代码块中的内容不复杂,那么可能转换线程带来的开销比实际业务代码执行的开销还要大。在很多场景下,可能我们的同步代码块的内容并不多,所以需要的执行时间也很短,如果我们仅仅为了这点时间就去切换线程状态,那么其实不如让线程不切换状态,而是让它自旋地尝试获取

Read More

源码角度了解双端队列linkedblockingdeque_周杰伦本人的博客-多极客编程

源码角度了解双端队列LinkedBlockingDeque LinkedBlockingDeque实现了BlockingDeque接口,既然是双端队列,也就是从两端都可以放入和获取元素 LinkedBlockingDeque和LinkedBlockingDeque差不多,初始容量也是可选的,不设置的话就是Integer的最大值,它有一个ReentrantLock锁和两个Condition条件,分别

Read More

源码角度了解copyonwritearraylist和copyonwritearrayset_周杰伦本人的博客-多极客编程

源码角度了解CopyOnWriteArrayList和CopyOnWriteArraySet CopyOnWriteArrayList CopyOnWriteArrayList在读的时候不加锁,写的时候加锁,它的原理是在写的时候复制一份源数据,然后修改,再写回到原数组中,它的成员变量array用来保存元素,被volatile修饰来 由于它的get()请求很简单,没有加锁,这里就不分析了,我们分析它

Read More

mysql 中的锁机制_wx630f055ce23fc的博客-多极客编程

介绍锁机制技术是为了解决问题而生的,锁被用来实现隔离性,保证并发事务的正确性。两段锁 & 一次封锁两段锁数据库遵循的是两段锁协议,将事务分成两个阶段,加锁阶段和解锁阶段(所以叫两段锁)加锁阶段:在加锁阶段只能进行加锁操作。如果事务要读取对象,必须先获得共享锁。可以有多个事务同时获得一个对象的共享锁如果事务要修改对象,必须先获得独占锁。只能有一个事务获得对象的独占锁。如果某个事务已经获得了对

Read More

## 介绍锁机制 技术是为了解决问题而生的,锁被用来实现隔离性,保证并发事务的正确性。 ## 两段锁 & 一次封锁 两段锁 数据库遵循的是两段锁协议,将事务分成两个阶段,加锁阶段和解锁阶段_wx630f055ce23fc的博客-多极客编程

介绍锁机制技术是为了解决问题而生的,锁被用来实现隔离性,保证并发事务的正确性。两段锁 & 一次封锁两段锁数据库遵循的是两段锁协议,将事务分成两个阶段,加锁阶段和解锁阶段(所以叫两段锁)加锁阶段:在加锁阶段只能进行加锁操作。如果事务要读取对象,必须先获得共享锁。可以有多个事务同时获得一个对象的共享锁如果事务要修改对象,必须先获得独占锁。只能有一个事务获得对象的独占锁。如果某个事务已经获得了对

Read More

mysql 原理与优化:update 优化_崔皓的博客-多极客编程

​谈到Update 语句大家可能不会陌生,很多情况下我们都会使用它来更新table中的记录。一般而言我们会使用innodb 的存储引擎,innodb引擎是基于行锁的,具体一点说是针对索引来加锁的(保证锁不能失效),并不是针对记录加锁,如果对于没有建立索引的字段进行过滤操作,从而执行update 的话,会导致表锁 。今天就看看在使用innodb的时候如何使用update 语句。已经存在course

Read More

reentrantlock原理,reentrantlock和synchronized区别_write less,do more。的博客-多极客编程

@[toc] ReentrantLock原理 重入锁ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁,而不会造成自己阻塞自己。重进入是指任意线程在获取到锁之后能够再次获取该锁而不会被锁所阻塞。ReentrantLock虽然没能像synchronized关键字一样支持隐式的重进入,但是在调用lock()方法时,已经获取到锁的线程,能够再次调用loc

Read More

synchronized已经不在臃肿了,放下对他的成见之初识轻量级锁_wx62e0b69890c77的博客-多极客编程

前言物竞天择,适者生存。JDK也在不断的优化中。关于JDK中synchronized锁内部也是不断的优化,前面我们分析了偏向锁用来解决初期问题,随着争抢的不断堆积轻量级锁营运而生。关注我,一个不断进步的社畜码农,带你一起摆脱危机轻量级锁上面说了没有竞争情况并且开启偏向锁的同时,才会产生偏向锁。但是偏向锁是不会主动撤销的。我们看下下面案列vm配置如下​​-XX:+UseBiasedLocking -

Read More

synchronized 锁的存储结构-多极客编程

​​100本计算机经典电子书领取​​​​联系我​​synchronized 关键字对我们来说一定不陌生。一想到并发编程,最直观的印象就是加锁。今天我们就来深入剖析一下锁的存储结构和升级过程。首先需要明确的一点是,利用 synchronized 实现同步的基础是:Java 中的每一个对象都可以作为锁。具体表现为以下 3 种形式。对于普通同步方法,锁是当前实例对象。对于静态同步方法,锁是当前类的 Cl

Read More

线程同步-多极客编程

一、线程同步的概念       在日常生活中,我们常常把”同步“理解为共同起步,一起动作,而线程同步中”同步“的是指协同步调,按照预定的先后次序运行。                                     线程同步:一个线程发出某一功能调用时,在没有得到相应的结果之前,此次调用不返回,同时其他线程为了保证数据的一致性,不能调用该功能。二、线程同步的必要性       在资源共享和

Read More

Redis实现并发阻塞锁方案-多极客编程

由于用户同时访问线上的下订单接口,导致在扣减库存时出现了异常,这是一个很典型的并发问题,本篇文章为解决并发问题而生,采用的技术为Redis锁机制+多线程的阻塞唤醒方法。 在实现Redis锁机制之前,我们需要了解一下前置知识。 一、前置知识 1、多线程 将wait()、notifyAll()归为到多线程的方法中略有一些不恰当,这两个方法是Object中的方法。 ① 当调用了wait()方法后,让当前

Read More

MySQL表空间传输的应用-多极客编程

单表的备份恢复测试用表 test.t单表备份xtrabackup -ucjr -pcjr -H1.15.57.253 -P3306 --tables='test.t' --backup --target-dir=/backup/t恢复备份xtrabackup --prepare --export --target-dir=/backup/t在一个测试环境中建表CREATE TABLE `t` (

Read More

#yyds干货盘点# 要修改值和原值相等,MySQL还会再执行update吗?-多极客编程

创建一个简单的表user,并插入一行,然后对这一行做修改。CREATE TABLE `users`( `id` int(11) NOT NULL primary key auto_increment, `type` int(11) DEFAULT NULL) ENGINE = InnoDB;insert into usersvalues (1, 2);这时候,表t里有唯一的一行

Read More

#yyds干货盘点# JVM 轻量级锁实现原理-多极客编程

1 轻量级锁的意义偏向锁适用于没有多线程竞争的情况,轻量级锁和重量级锁均用于多线程场景:重量级锁依赖操作系统语义,在无法获取锁时,线程直接进入阻塞状态轻量级锁会自旋一段时间,尝试获取锁,超时后再转为重量级锁。在多线程交替执行同步块的情况下,尽量避免重量级锁引起的性能消耗。但若多个线程在同一时刻进入临界区,会导致轻量级锁膨胀升级为重量级锁,所以轻量级锁的引入并非是为完全替代重量级锁。2 轻量级锁的

Read More

#yyds干货盘点# 浅析 synchronized 底层实现与锁相关 | Java-多极客编程

引言 一切的最开始都是源自一系列为什么? 为什么加了锁 synchronized 关键字,就可以实现同步? synchronized 底层到底做了什么优化? Java 中的各种锁及锁膨胀? 用户态、内核态与上下文切换到底是什么鬼? 什么叫自旋锁,它与 CAS 的关系? 对象头是什么玩意,什么又是 MarkWord ? 概述 synchronizrd 是开发中解决同步问题中最常见,也是最简单的

Read More

#yyds干货盘点# Java | 关于synchronized相关理解-多极客编程

背景 资源冲突 Java本身是支持多线程的,而在多线程的情况下,为了防止 多个任务同时访问同一个资源而导致的冲突问题,所以出现了加锁机制。也就是说第一个访问某项资源的任务必须锁定这项资源,使其他任务在其被解锁之前,就无法访问它,而在其被解锁时候,另一个任务就可以锁定并使用它。 所以Java提供了关键字 synchronized ,为防止资源冲突。当任务希望执行被synchronized 关键字保护

Read More

3万字聊聊什么是Redis(七)-多极客编程

大家好,我是Leo 上一篇我们介绍了缓存和数据不一致性引发的问题不同的缓存类型以及解决访问。Redis常见的生产问题,缓存雪崩,击穿,穿透,由穿透又聊到了布隆过滤器缓存污染以及应用措施,顺带的聊了一下LFU和LRU的经典之处继上篇Redis技术总结六,我们继续聊聊Redis的相关技术! 这篇主要是介绍一下Redis并发的解决方案推荐阅读​​3万字聊聊什么是MySQL​​​​3万字聊聊什么是Re

Read More

#yyds干货盘点#面试官让我聊聊synchronized-多极客编程

1、简介synchronized是Java并发领域元老级人物,synchronized很多程序员都会用,它有三种表现形式。普通同步方法 -> synchronized锁住的是当前对象private synchronized void demo() {// todo}静态同步方式 -> synchronized锁住的是当前类的Class对象private static synchroni

Read More

#yyds干货盘点#面试官synchronized连环问,学会Monitor之后轻松拿下-多极客编程

1、简介我们Java程序员编码时谈论的最多的两个字就是对象,Java中几乎所有的技术都是围绕对象展开。本文将要讲述的Monitor并不是Java对象,而是在操作系统中关联的“对象”,Monitor是Java重量级锁synchronized实现的关键,因此学习Java单机同步机制就离不开对Monitor的剖析。Monitor经常被人们称为监视器锁和管程。2、对象头Monitor与Java对象头相关联

Read More

面试被问AQS、ReentrantLock答不出来?这些知识点让我和面试官聊了半小时!-多极客编程

听说微信搜索《Java鱼仔》会变更强哦! 本文收录于JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 并发编程算是Java的一个难点,经常做业务相关的程序员基本上用不到juc的包,但是这些知识点十分重要,所以不管在哪里,时刻保持学习真的很重要。 (一)AQS概述 Java并发编程的核心在于java.concurrent.util包,juc中大多数同步器的实现都围

Read More