• 2024-07-02可重入锁思想,设计MQ迁移方案
    如果你的MQ消息要从Kafka切换到RocketMQ且不停机,怎么做?在让这个MQ消息调用第三方发奖接口,但无幂等字段又怎么处理?今天小傅哥就给大家分享一个关于MQ消息在这样的场景中的处理手段。这是一种比较特例的场景,需要保证切换的MQ消息不被两端同时消费,并且还需要在一段消费失败后的MQ还
  • 2024-06-14持续总结中!2024年面试必问 20 道并发编程面试题(五)
    上一篇地址:持续总结中!2024年面试必问20道并发编程面试题(四)-CSDN博客九、什么是可重入锁(ReentrantLock)?可重入锁,也称作递归锁或再入锁,是一种同步机制,用于在多线程编程中控制对共享资源的访问。这种锁允许同一个线程多次获取同一个锁,而不会导致死锁。可重入锁通常由编程语言
  • 2024-06-04基于redis实现可重入分布式锁
    前提redis+lua原理采用redishash数据类型,实现分布式可重入锁hash结构中存储字段value,countvalue:加锁的值,重入加锁时判断当前value和传入的value是否相等,相等情况下认为是重入锁,将count加一,不等属于其他场景抢占锁,该情况下获取锁失败锁释放时,判断value是否相等,相等情况下是
  • 2024-06-03JavaEE初阶--锁进阶理解
    目录一、引言二、锁的分类1.乐观锁vs悲观锁2.重量级锁vs轻量级锁3.自旋锁vs挂起等待锁4.公平锁vs非公平锁5.可重入锁vs不可重入锁6.读写锁三、CAS1.什么是CAS?2.CAS伪代码3.CAS的实现4.CAS的应用5.CAS的ABA问题四、总结一、引言 前面的博客我们
  • 2024-05-29JAVAEE之线程多进阶(1)_常见的锁策略
    前言 在前面的线程初阶的内容中,我们已经简单介绍了锁,包括synchronized、volatile关键字(详细内容可见:https://blog.csdn.net/2301_80653026/article/details/138818637和https://blog.csdn.net/2301_80653026/article/details/138867371),我们在接下来要讲解的锁策略内容,对
  • 2024-05-26Three Locks To Rule Them All(三把锁统治一切)
    ThreeLocksToRuleThemAll(三把锁统治一切)【英文原文】为了确保线程安全,特别是在服务器端,我们通常使用临界区(criticalsections)或锁(locks)来保护代码。在最近的Delphi版本中,我们引入了TMonitor特性,但我更倾向于信任操作系统提供的锁机制,这些锁是通过Windows临界区或POSIXfute
  • 2024-04-21从源码入手详解ReentrantLock,一个比synchronized更强大的可重入锁
    写在开头随手一翻,发现对于Java中并发多线程的学习已经发布了十几篇博客了,多线程是Java基础中的重中之重!因此,可能还需要十几篇博客才能大致的讲完这部分的知识点,初学者对于这部分内容一定要多花心思,不可马虎!今天我们继续来学习一个重要知识点:ReentrantLockReentrantLock:是一种
  • 2024-03-27ReentrantLock重入锁
    ​一,重入锁定义重入锁,顾名思义,就是支持重新进入的锁,表示这个锁能够支持一个线程对资源重复加锁。如果一个线程已经拿到了锁,那么他需要再次获取锁的时候不会被该锁阻塞。举个例子,publicsynchronizedvoidtest(){dosomething...test2();}publicsynchronizedvoid
  • 2024-03-25阿里二面:Java中锁的分类有哪些?你能说全吗?
    引言在多线程并发编程场景中,锁作为一种至关重要的同步工具,承担着协调多个线程对共享资源访问秩序的任务。其核心作用在于确保在特定时间段内,仅有一个线程能够对资源进行访问或修改操作,从而有效地保护数据的完整性和一致性。锁作为一种底层的安全构件,有力地防止了竞态条件和数据不
  • 2024-03-04Redis技术论点
    Redis单线程&&多线程问题redis是单线程还是多线程在redis4.X之前的版本,redis是单线程;redis4.X版本之后,陆续开始支持多线程,比如持久化过程,但是核心工作线程仍然是单线程;redis6.X之后,redis针对部分设计大量数据操作,存在阻塞线程风险的命令提供了异步操作,如:zrange、ZRANK、flusdb等
  • 2024-02-23Java锁的思想和区别
    乐观锁VS悲观锁乐观锁和悲观锁是两种处理并发访问的不同策略,用于确保多个操作不会同时修改同一资源而导致数据不一致的问题。它们的区别在于处理并发时的思想和实现方式:乐观锁:思想:认为在大多数情况下,读操作远远多于写操作,因此假设在绝大多数情况下并发冲突是不会发生的,直到出
  • 2024-02-22stm32 中断处理函数注意事项
    一前记最近在公司的一个项目中碰到一个解决了定位很久的bug,bug找到的时候发现犯了很低级的错误——在中断处理函数中调用了printf函数,因为中断处理函数的调用了不可重入函数,导致接收到莫名其妙的数据。后面通过定位才发现这个是因为里面调用了不可重入函数导致的。那
  • 2024-01-27可重入锁的含义及解决的问题
    可重入锁顾名思义可以重复利用的锁,但不是任何方法都能重复使用,而是最初占有锁的方法调用的方法,即是调用方法与被调方法可以同时占用同一把锁。下面从三个角度来说明:1.被调方法没有加锁publicclassLockTest{privatestaticfinalObjectobj=newObject();publicv
  • 2023-12-29ReentrantReadWriteLock源码阅读
    ReentrantReadWriteLock源码阅读目录ReentrantReadWriteLock源码阅读简介例子代码分析总览Syncstate定义lockcount和holdcountSync.HoldCounter类Sync类其他成员变量tryAcquiretryReleasetryAcquireSharedfullTryAcquireSharedtryReleaseSharedtryWriteLocktryReadLockSync类分
  • 2023-12-16你知道哪几种Java锁?分别有什么特点?
    今天我们聊一聊Java锁的分类锁的7大分类需要首先指出的是,这些多种多样的分类,是评价一个事物的多种标准,比如评价一个城市,标准有人口多少、经济发达与否、城市面积大小等。而一个城市可能同时占据多个标准,以北京而言,人口多,经济发达,同时城市面积还很大。同理,对于Java中的锁而言
  • 2023-12-12可重入锁
    可重⼊锁(⼜名递归锁)是指在同⼀个线程在外层⽅法获取锁的时候,再进⼊该线程的内层⽅法会⾃动获取锁(前提,锁对象得是同⼀个对象),不会因为之前已经获取过还没释放⽽阻塞。 如果是1个有synchronized修饰的递归调⽤⽅法,程序第2次进⼊被⾃⼰阻塞了岂不是天⼤的笑话,出现了作茧⾃缚
  • 2023-12-08锁-基础篇(2)
    ReentrantLock可重入ReentrantLock和syncronized关键字一样,都是可重入锁,不过两者实现原理稍有差别,RetrantLock利用AQS的的state状态来判断资源是否已锁,同一线程重入加锁,state的状态+1;同一线程重入解锁,state状态-1(解锁必须为当前独占线程,否则异常);当sta
  • 2023-12-05ReenTrantLock可重入锁(和synchronized的区别)总结
    可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。锁的实现:Synchronized是依赖于JVM实现的,而ReenTra
  • 2023-10-24可重入锁ReentrantLock在性能测试常见用法
    在进行Java多线程编程的过程中,始终绕不开一个问题:线程安全。一般来说,我们可以通过对一些资源加锁来实现,大多都是通过synchronized关键字实现。在做性能测试时,如果TPS或者QPS要求没有特别高,synchronized一招鲜基本也能满足大部分的需求了。对于一招鲜无法很好解决的问题,就需要
  • 2023-10-17【Java 并发编程】ReentrantLock
    目录ReentrantLock公平锁和非公平锁synchronized和ReentrantLock有什么区别?ReentrantLockReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁等
  • 2023-10-11Redis学习之Redisson实现可重入锁
    如何实现可重入锁目的:保证同一个线程可以多次获取同一把锁解决思路:在锁的value中额外保存当前线程获取锁的次数,每次获取锁+1、释放锁-1,当次数为0时才真正删除key。采用hash结构来存储锁信息,如图:流程如下:注意:所有的判断和操作都需要使用Lua脚本来保证原子性每
  • 2023-08-23c语言的可重入和不可重入函数
    先贴上一篇优秀的博文链接:C语言之可重入函数和不可重入函数_c可重入函数_KiranWang的博客-CSDN博客  总结:不可重入函数的四种情况1.静态数据结构:如静态局部变量活全局变量2.malloc()或者free()函数因为这两个函数都会操作全局的链表,如果第一次malloc没结束时,再被一次malloc
  • 2023-08-05C++可重入函数和不可重入函数
    转载:https://blog.csdn.net/weixin_41969690/article/details/108006834C++可重入函数和不可重入函数可重入函数是指能够被多个线程“同时”调用的函数,并且能保证函数结果正确不必担心数据错误的函数。不可重入函数是指不能运行在多任务环境下,除非能保证互斥的函数。由于使用
  • 2023-07-10线程安全和可重入
    线程安全和可重入线程安全定义如果一个函数被多个线程并发执行时,这个函数不会出现异常,则称这个函数是线程安全的。线程安全的破坏如果这个函数被多个线程调用时,可能会修改同一个资源,则就可能破坏线程安全。例如,函数访问全局变量:#include<thread>#include<stdio.h>in
  • 2023-06-29rtos中,线程设计原则
    设计原则:运行时间长的线程的优先级应较低;一个线程完成一个功能;可重入函数:可重入函数,可被中断,在这个函数执行的任何时刻可以中断它,转入执行另一段代码,返回时,不会出现什么错误;多任务系统下,中断可能在任务执行的任何时间发生,一个函数的执行期间被中断后,到重新恢复到断点进行执