首页 > 其他分享 >线程的锁

线程的锁

时间:2023-11-15 19:45:58浏览次数:25  
标签:事务 调用 写锁 获取 线程 数据

乐观锁 : 调用时 , 假设资源没有被线程调用 , 调用前 , 调用方法将内存中资源的值和预期的原值进行比较 , 如果一致则更新 , 否则不做任何操作

悲观锁 : 调用时 , 假设资源总是被线程调用 , 每次使用时都加锁 , 例如sychronized

场景 :

  • 乐观锁适用于重试代价不大 / 数据争用不严重 / 需要快速响应的场景

  • 悲观锁使用于重试代价大 , 数据争用严重的场景

公平锁 : 多个线程去获取锁的时候 , 线程会直接进入队列 , 只能是队列第一位才能得到锁

非公平锁 : 多个线程去获取锁的时候 , 会尝试直接获取 , 获取不到 , 猜进入等待队列 , 如果能获取到 , 则直接获取到 , 非公平锁性能比公平锁块 5~10 倍

可重入锁 : 线程已经获取某个锁 , 可以再次获取 , 而不会出现死锁

属性锁 :

  • 共享锁 : 当事务对数据加上读锁的时候 , 其他事务只能对数据加读锁 ,不能做任何的修改

主要是为了支持在并发的场景下的读取数据而出现的 , 读取数据时 , 不允许其他事务对当前的数据进行修改操作 , 从而避免 "不可重读" 的问题的出现

  • 排他锁 : 当事务对数据加上写锁的时候 , 其他事务既不能对该数据添加读锁 , 也不能对该数据添加写锁 , 写锁和其他锁是互斥的 , 只有在当前数据的写锁被释放后 , 其他事务才能对其添加写锁或读锁

主要是为了解决在修改数据时 , 不允许其他事务对当前数据进行修改和读取操作 , 从而可以有效避免 "脏读" 的问题产生

标签:事务,调用,写锁,获取,线程,数据
From: https://www.cnblogs.com/three-oom/p/17834611.html

相关文章

  • 02_实验二_线程状态及转换
    实验二线程状态及转换实验目的调试线程在各种状态间的转换过程,熟悉线程的状态和转换。通过为线程增加挂起状态,加深对线程状态的理解。预备知识线程都有哪些状态就绪运行阻塞结束EOS是如何定义这些状态线程在其整个生命周期中(从创建到终止)会在多个不同的状态间进......
  • 妙用 FutureTask + 线程池:轻松解决接口超时问题!
    来源:blog.csdn.net/qq_44384533/article/details/112324224之前红包权益领取查询的接口超时了,因为有用户订购的权益有点多解决方案用线程池+FutureTask将1个查询拆分成多个小查询选择FutureTask是因为它具有仅执行1次run()方法的特性(即使有多次调用也只执行1次),避免了重复查......
  • Java多线程面试题
    目录0、请你说说线程和进程的区别1、请你说说多线程2、说说CAS的ABA问题3、说说你对AQS(抽象队列同步器)的理解4、Java哪些地方使用了CAS5、说说怎么保证线程安全5、说说你了解的线程同步方式6、说说synchronized的用法及原理7、synchronized和Lock有什么区别8、说说Java......
  • Java中ThreadLocal说明 使用线程内变量,完成后需调用remove()方法将其移除,即使异常也
    Java中ThreadLocal说明,完成后需调用remove()方法将其移除,即使异常也记得remove()回收,创建ThreadLocal线程变量publicstaticThreadLocalthreadLocal=newThreadLocal<>();1、ThreadLocal是什么ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储......
  • 从理解和实战安排多线程学习-知识点整理
    确认目标一个是对知识点的理解,另外一个是对知识点的运用.相辅相成.同时带着Arthus去观察代码的情况.压测出代码的性能.先阅读书籍,理解知识点,这部分速度要快.然后针对知识点做一些练习,这部分速度略慢,不懂的需要查书.提高难度,挑战一些有创意的编程,去综合实现和......
  • 多线程案例
    111200  #ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>#include"subthread.h"#include<QThread>namespaceUi{classMainWindow;}classMainWindow:publicQMainWindow{Q_OBJECTpublic:explicitM......
  • 2023蚂蚁金服/理想/字节/快手面试笔试题——5个线程交叉打印1~100
    原题来自牛客网面经。类似这种多线程轮流打印的手撕题会出现很多次,比如以前就看过类似的3个线程轮流打印ABC。 关键点在于:怎么设计机制保证这个顺序,至于要打印的数字,肯定是要用互斥量保护起来。C++代码如下:#include<iostream>#include<mutex>#include<thread>#include......
  • JVM 里 new 对象时,堆会发生抢占吗?JVM是怎么设计来保证 线程安全的?
    会。假设JVM虚拟机上,每一次new对象时,指针就会向右移动一个对象size的距离,一个线程正在给A对象分配内存,指针还没来得及修改,另一个为对象B分配内存的线程又引用了这个指针来分配内存,这就发生了抢占。有两种方案来解决这个问题:1、CAS采用CAS分配重试的方式来保证更新操作的原子性2、TL......
  • 线程执行
    importthreading#新线程执行的代码:defloop():print('thread%sisrunning...'%threading.current_thread().name)n=0whilen<5:n=n+1print('thread%s>>>%s'%(threading.current_thread().na......
  • 随笔 复习 连接池 线程池
    连接池实现思路classConnectPool{public:ConnectPool(intnumber){for(inti=0;i<=number;i++){intfd=socket(); //创建通信的fdconect(); //连接服务器m_list.push(fd);//往容器中存储链接......