Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。一、悲观锁与乐观锁悲观锁:认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字 和 Lock 的实现类都是悲观锁。乐观锁:认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-09 13:43:56
                            
                                48阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一:java中的锁
java中各种锁的概念包括:公平锁、非公平锁、自旋锁、可重入锁、偏向锁、轻量级锁、重量级锁、读写锁、互斥锁等待。
• 公平锁和非公平锁
• 公平锁是指多个线程在等待同一个锁时,必须按照申请锁的先后顺序来一次获得锁。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-18 09:13:57
                            
                                37阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # Java中的间隙锁
## 目录
- [介绍](#介绍)
- [间隙锁的流程](#间隙锁的流程)
- [实现间隙锁的步骤](#实现间隙锁的步骤)
  - [1. 创建锁对象](#1-创建锁对象)
  - [2. 获取锁](#2-获取锁)
  - [3. 释放锁](#3-释放锁)
  - [4. 使用间隙锁](#4-使用间隙锁)
- [关系图](#关系图)
- [总结](#总结)
## 介绍            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-11-26 12:03:15
                            
                                75阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            ##1、为什么要用锁      在了解为什么要用锁之前需要了解两个概念,线程安全和线程不安全,线程安全指的是多个线程对共享变量访问时的结果和单线程下顺序对共享变量访问的结果是一致的,是符合预期的;而线程不安全指的是多个线程对共享变量访问的结果每次都是不确定的。为了保证线程安全这里又几种方法,第一个不用共享变量,各自用各自的变量就不会有线程            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-16 22:29:24
                            
                                53阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            什么是间隙锁?间隙锁是一个在索引记录之间的间隙上的锁。间隙锁的作用保证某个间隙内的数据在锁定情况下不会发生任何变化。比如我mysql默认隔离级别下的可重复读(RR)。当使用唯一索引来搜索唯一行的语句时,不需要间隙锁定。如下面语句的id列有唯一索引,此时只会对id值为10的行使用记录锁。select * from t where id = 10 for update;// 注意:如果是普通查询则是快            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-28 19:28:27
                            
                                74阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1 公平锁/非公平锁公平锁: 是指多个线程按照申请锁的顺序来获取锁。在并发环境中,每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中,以后会按照FIFO的规则从队列中取出并占有锁。非公平锁: 是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。在高并发的情况下,有可能会造成优先级反转或饥            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-18 13:07:04
                            
                                54阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在 Java 中主要2种加锁机制: synchronized 关键字 java.util.concurrent.Lock (Lock是一个接口,ReentrantLock是该接口一个很常用的实现) 看到过一张总结很全的图,这里我自己又细化整理了一下相关知识 关于Synchronized和Locksynchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-15 21:23:06
                            
                                72阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            什么是间隙锁间隙锁(Gap Lock)是Innodb在可重复读提交下为了解决幻读问题时引入的锁机制。当用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这些“间隙”进行加锁,这种锁机制就是所谓的间隙锁(NEXT-KEY)锁。间隙锁引起的问题因为执行SELECT语句            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-02-14 13:44:40
                            
                                43阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            在Java中,双重检查锁定(Double-Checked Locking)是一种多线程编程中用来减少同步的开销的技术。双检锁的主要用途是**在创建单例模式时,确保只有一个实例被创建,尤其是在懒汉式单例模式中,**它被大量使用。            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-12-08 08:42:22
                            
                                150阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            方法锁和对象锁说的是一个东西,即只有方法锁或对象锁和类锁两种锁java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁称为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。java内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当线程A尝试去获得线程B持有的内置锁时,线程A            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-22 10:30:26
                            
                                267阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            1.可重入锁   如果锁具备可重入性,则称作为可重入锁。像synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。举个简单的例子,当一个线程执行到某个synchronized方法时,比如说method1,而在method1中会调用另外一个synchronized方法method2,此时线程不必重新去申请锁            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-08 18:29:39
                            
                                107阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Java多线程共享模型之乐观锁(CAS与Atomic原子类) 文章目录Java多线程共享模型之乐观锁(CAS与Atomic原子类)背景CAS分析_Atomic原子类ABA问题AtomicStampedReference版本号原子数组AtomicIntegerArray原子类常见操作 乐观锁的概念是相对于轻量级锁、偏向锁、重量级锁而言的乐观锁本身是一种有锁似无锁的状态CAS需要配合valiate使用            
                
         
            
            
            
            前言java中同步锁包括synchronized与Lock,前面已经讲过关于synchronized的使用和基本原理,synchronized是java内置关键字,在jvm层面,Lock是个java类,其实指的是 JDK 中的同步锁。为什么Java中除了内置的锁,还要使用 java类 来声明一个同步锁呢?这主要是synchronized有缺点,为了弥补缺点,所以引出了JDK中的同步锁。synchr            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-22 13:54:32
                            
                                45阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            锁消除和锁粗化都是Java中针对锁的优化技术。
锁消除:在Java编译时,JIT编译器可以通过静态分析发现不必要的同步,然后将其消除。这样会使得代码执行更快,因为它减少了线程的上下文切换和锁处理的开销。
锁粗化:在Java中,每次加锁和解锁都需要进行系统调用。如果加锁和解锁的代码很近,那么频繁地进行系统调用会浪费很多CPU资源。锁粗化就是指扩大加锁和解锁的代码范围,尽可能地减少系统调用的次数,这样            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-05-30 19:32:34
                            
                                265阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            无论是对一个对象进行加锁还是对一个方法进行加锁,实际上都是对对象进行加锁。虚拟机会根据synchronized修饰的是实例方法还是类方法,去取对应的实例对象或者Class对象来进行加锁。synchronized这个关键字是一个重量级锁,开销很大,但到了jdk1.6之后,该关键字被进行了很多的优化。锁对象锁实际上是加在对象上的,那么被加了锁的对象我们称之为锁对象,在java中,任何一个对象都能成为锁            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-01 11:54:57
                            
                                65阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            锁的概述 
一. 为什么要引入锁 
多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 
丢失更新
A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 
脏读
A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致 
不可重复读
A用户读取数据,随后B用户读            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-20 10:27:40
                            
                                47阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            并发控制当程序中可能出现并发的情况时,我们就需要通过一定的手段来保证在并发情况下数据的准确性,通过这种手段保证了当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。没有做好并发控制,就可能导致脏读、幻读和不可重复读等问题。  我们常说的并发控制,一般都和数据库管            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-08-31 23:31:05
                            
                                125阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Java并发编程之无锁在谈论无所之前先来看看乐观派和悲观派。对于乐观派而言,他们总认为事情总会朝着好的方向发展,总认为几乎不会坏事,我已可以随意的去做事。但是对于悲观派来说,他们认为出错是一种常态,所以无论事情大小都会考虑的面面俱到,滴水不漏。在两种派别对应在并发中就是加锁和无锁,也就是说加锁是一种悲观的策略,而无锁是一种乐观的策略。对于锁,如果有多个线程同事访问一个临界资源,宁可牺牲性能让线程等            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-15 03:38:49
                            
                                42阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、并发控制 当程序中可能出现并发的情况时,就需要通过一定的手段来保证在并发情况下数据的准确性,通过这种手段保证了当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2020-09-21 15:11:00
                            
                                216阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            一、并发控制 当程序中可能出现并发的情况时,就需要保证在并发情况下数据的准确性,以此确保当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。 没有做好并发控制,就可能导致脏读、幻读和不可重            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-17 10:50:45
                            
                                0阅读