备战金九银十面试季,每天一个面试小技巧(五锁机制篇) Java

备战金九银十面试季,每天一个面试小技巧(五锁机制篇)

前言: hello大家好我是搬砖,没错又是我,又来给大家分享面试题来了。身为一个面试题狂魔,每天不是在刷题的路上就是在找题的路上。今天在刷B站的时候忽然发现一个锁机制的问题,仔细回想一下还没有做一下总结,今天就来给大家总结一下,希望对你们有用。 锁的原因都是由并发问题发生的,在此我只是写一些面试中可能会问到的问题以及问题的答案,并不是给大家深入的讲解锁机制,一般面试官问都是从一...
阅读全文
微服务中的分布式锁方案 软件架构

微服务中的分布式锁方案

最近在工作中碰到一个分布式锁问题,这个问题之前做项目的过程也搞过,不过没有深入整理,这个周末有时间刚好整理一把。 为什么需要分布式锁? 在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰进而保证一致性,这个时候,便需要使用到分布式锁。 常见的实现方案 基于数据库实现 数据表方案 最容...
阅读全文
基础篇:详解锁原理,synchronized、volatile+cas底层实现 Java

基础篇:详解锁原理,synchronized、volatile+cas底层实现

随着多进程多线程的出现,对共享资源(设备,数据等)的竞争往往会导致资源的使用表现为随机无序 例如:一个线程想在控制台输出"I am fine",刚写到"I am",就被另一线程抢占控制台输出"naughty",导致结果是"I am naughty";对于资源的被抢占使用,我们能怎么办呢?当然不是凉拌,...
阅读全文
深入浅出Semaphore源码解析 Java

深入浅出Semaphore源码解析

Semaphore 通过permits的值来限制线程访问临界资源的总数,属于有限制次数的共享锁,不支持重入。 前提条件 在理解 Semaphore 时需要具备一些基本的知识: 理解AQS的实现原理 之前有写过一篇 《深入浅出AQS源码解析》 关于AQS的文章,对AQS原理不了解的同学可以先看一下 Semaphore源码解析 Semaphore 中有3个内部类,分别是...
阅读全文
全网最全!这份深入讲解jdk和jvm原理的笔记,刷新了我对JVM的认知 Java

全网最全!这份深入讲解jdk和jvm原理的笔记,刷新了我对JVM的认知

前言 前两天和朋友探讨技术的时候有聊到JVM和JDK这一块,聊到这里两个人就像高山流水遇知音那是根本停不下来,事后我想着趁现在印象还比较深刻就把这些东西整理起来分享给大家来帮助更多的人吧。话不多说,满满的干货都整理在下面了! JVM探究 jvm的位置 jvm的体系结构 堆里面有垃圾,需要被GC回收 栈里面是没有垃圾的,用完就弹出去了,栈里面有垃圾...
阅读全文
深入浅出ReentrantLock源码解析 Java

深入浅出ReentrantLock源码解析

ReentrantLock 不但是可重入锁,而且还是公平或非公平锁,在工作中会经常使用到,将自己对这两种锁的理解记录下来,希望对大家有帮助。 前提条件 在理解 ReentrantLock 时需要具备一些基本的知识 理解AQS的实现原理 之前有写过一篇 《深入浅出AQS源码解析》 关于AQS的文章,对AQS原理不了解的同学可以先看一下 什么是可重入锁 当一个线程已经持有锁...
阅读全文
Java面试宝典2020系列 MySQL篇(二) Java

Java面试宝典2020系列 MySQL篇(二)

可以按照锁的粒度把数据库锁分为表级锁和行级锁。 表级锁 Mysql中锁定 粒度最大 的一种锁,对当前操作的整张表加锁,实现简单 ,资源消耗也比较少,加锁快,不会出现死锁 。其锁定粒度最大,触发锁冲突的概率最高,并发度最低,MyISAM和 InnoDB引擎都支持表级锁。 行级锁 Mysql中锁定 粒度最小 的一种锁,只针对当前操作的行进行加锁。 行...
阅读全文
集群多JVM分布式锁实现 Java

集群多JVM分布式锁实现

基于数据库表乐观锁 (基本废弃) 要实现分布式锁,最简单的⽅方式可能就是直接创建⼀一张锁表,然后通过操作该表中的数据来实现了了。 当我们要锁住某个⽅法或资源时,我们就在该表中增加一条记录,想要释放锁的时候就删除这条记录。 比如创建这样一张数据库表: CREATE TABLE `methodLock` ( `id` int(11) NOT NULL AUTO_INCREMENT C...
阅读全文
Java并发编程 | 悲观锁和乐观锁机制 Java

Java并发编程 | 悲观锁和乐观锁机制

一、资源和加锁 1、场景描述 多线程并发访问同一个资源问题,假如线程A获取变量之后修改变量值,线程C在此时也获取变量值并且修改,两个线程同时并发处理一个变量,就会导致并发问题。 这种并行处理数据库的情况在实际的业务开发中很常见,两个线程先后修改数据库的值,导致数据有问题,该问题复现的概率不大,处理的时候需要对整个模块体系有概念,才能容易定位问题。 2、演示案例 ...
阅读全文
共享锁 & 排他锁 & 读写锁 Java

共享锁 & 排他锁 & 读写锁

互斥锁(排他锁) 并发编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。共享对象对应一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。 共享锁 共享锁,允许多个线程共同访问资源,又可称为读锁,允许并发查看数据的锁。 读写锁 读写锁既是互斥锁,又是共享锁,其中读操作共享,写操作互斥。 同一时间只有一个线程可以占有写锁,同一...
阅读全文
Loading...