作者 | cxuan 责编 | Elle Java 锁分类 Java 中的锁有很多,可以按照不同的功能、种类进行分类,下面是我对 Java 中一些常用锁的分类,包括一些基本的概述 从线程是否需要对资源加锁可以分为 悲观锁 和 乐观锁 从资源已被锁定,线程是否阻塞可以分为 自旋锁 从多个线程并发访问资 ...
分类:
编程语言 时间:
2020-06-06 00:46:19
阅读次数:
53
一、前言 在了解悲观锁和乐观锁之前,我们先了解一下什么是锁,为什么要用到锁? 技术来源于生活,锁不仅在程序中存在,在现实中我们也随处可见,例如我们上下班打卡的指纹锁,保险柜上的密码锁,以及我们我们登录的用户名和密码也是一种锁,生活中用到锁可以保护我们人身安全(指纹锁)、财产安全(保险柜密码锁)、信息 ...
分类:
其他好文 时间:
2020-06-05 15:24:39
阅读次数:
55
概述 1、在并发编程中,为了控制数据的正确性,我们往往需要使用锁来来保证代码块的执行隔离性。但是在很多时候锁的开销太大了,而在某些情况下,我们的局部变量是线程私有的,每个线程都会有自己的独自的变/量,这个时候我们可以不对这部分数据进行加锁操作。于是ThredLocal应运而生。 2、ThredLoc ...
分类:
编程语言 时间:
2020-06-04 20:00:03
阅读次数:
57
MYSQL:InnoDB的行锁模式及加锁方法 共享锁:允许一个事务度一行,阻止其他事务获取相同数据集的排他锁。 SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE 排他锁:允许获取排他锁的事务更新数据,阻止其他事务获取相同的数据集共享读锁和排他 ...
分类:
数据库 时间:
2020-06-03 18:52:21
阅读次数:
159
一、乐观锁 VS 悲观锁 悲观锁和乐观锁大概是大家听到最多的两种锁了,这两种锁的区分更多的是思想上。 对于一个操作,悲观锁认为自己在操作过程中,一定有别的线程也要来修改这个数据,所以一定会加锁。而乐观锁则不认为会有别的线程来干扰自己,所以不需要加锁。 在Java中,synchronized关键字和L ...
分类:
编程语言 时间:
2020-06-03 17:12:16
阅读次数:
59
JDK并发包 3.1同步控制 synchronized、obj.wait()、obj.notify() 3.1.1关键字synchronized的功能扩展:重入锁 java.util.concurrent.locks.ReentrantLock类来实现的 手动加锁:lock.lock() 手动解锁: ...
分类:
编程语言 时间:
2020-06-03 13:56:57
阅读次数:
61
一些很小的项目一般不会特意使用或注意数据锁,其实在事务操作修改与删除时就已经有隐式加锁。一般所有涉及到共享数据都会考虑下数据的原始性问题,保证数据在使用或修改时原始性没有被破坏就需要锁定数据所有权;除非任何时刻同一时间只有一个进程在运行,但这种业务非常少。锁会增加性能开销,使用不合理容易影响项目性能甚至会造成死锁。Mysql数据库锁受引擎影响,不同的引擎锁的方式不一样。常用的引擎:MyISAM引擎
分类:
数据库 时间:
2020-06-03 09:30:57
阅读次数:
150
1. 什么是分布式锁? 分布式锁:进程锁(可以在查询和更新数据库的时候都加锁) 分布式就是SOA,面向分布式对象的架构 2. 为什么使用分布式锁:数据安全 保持数据一致性的是分布式事务 3.应用分布式的场景: 3.1 redis 3.2 redis客户端,StackExchange Redis 3. ...
分类:
其他好文 时间:
2020-06-02 23:01:36
阅读次数:
53
1.说说synchronized关键字的底层原理是什么? synchronized底层的原理,是跟jvm指令和monitor有关系的 如果我们用到了synchronized关键字,在底层编译后的JVM指令中,会有monitorenter和monitorexit两个指令 加锁执行monitorente ...
分类:
其他好文 时间:
2020-05-31 22:08:33
阅读次数:
100
读写锁的概念很简单,允许多个线程同时获取读锁,但同一时间只允许一个线程获得写锁,因此也称作共享-独占锁。在C#中,推荐使用ReaderWriterLockSlim类来完成读写锁的功能。某些场合下,对一个对象的读取次数远远大于修改次数,如果只是简单的用lock方式加锁,则会影响读取的效率。而如果采用读 ...
分类:
其他好文 时间:
2020-05-31 17:43:09
阅读次数:
62