深圳幻海软件技术有限公司 欢迎您!

  • 面试必问:synchronized和ReentrantLock有什么区别?

    在Java中,常用的锁有两种:synchronized(内置锁)和ReentrantLock(可重入锁),二者的功效都是相同得,但又有很多不同点,所以我们今天就来聊聊。区别1:用法不同synchronized可用来修饰普通方法、静态方法和代码块,而ReentrantLock只能用在代码块上。sync

  • 都已经2023年了,你还不知道StampedLock吗?

    ​概述想到读写锁,大家第一时间想到的可能是ReentrantReadWriteLock​。实际上,在jdk8以后,java提供了一个性能更优越的读写锁并发类StampedLock​,该类的设计初衷是作为一个内部工具类,用于辅助开发其它线程安全组件,用得好,该类可以提升系统性能,用不好,容易产生死锁和

  • 面试题:三个线程按顺序打印 ABCABC

    小伙伴们好呀,最近在重新复习,整理自己的知识库,偶然看到这道面试题:三个线程按顺序打印ABCABC,尝试着做一下,才发现自己对线程还有好多地方不懂,蓝瘦……🐷思路很明显,这里就涉及线程间相互通信的知识了。而相互通信的难点就是要控制好,阻塞和唤醒的时机。一.这里就是A通知B,B通知C,C通知A二.三

  • 干货,深入剖析ReentrantLock源码,推荐收藏

    ReentrantLock和Synchronized都是Java开发中最常用的锁,与Synchronized这种JVM内置锁不同的是,ReentrantLock提供了更丰富的语义。可以创建公平锁或非公平锁、响应中断、超时等待、按条件唤醒等。在某些场景下,使用ReentrantLock更适合,功能更强

  • 分布式锁实战-基于Etcd的实现很优雅

    一、etcd简介1.etcd的背景虽然Kubernetes给云原生时代带来了颠覆性的新气象,但却很少人了解被钦定作为其后端存储的etcd,本篇从分布式锁视角梳理etcd的各种机制,探索基于etcd的锁实现是怎样。etcd能被Kubernetes 如此青睐,是因为它一直在聆听社区的声音并快速

  • 万字长文带你详解死锁!

    作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)死锁(DeadLock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁。一、死锁演示死锁的形成分为两个方面,一个是使用内

  • 不堆概念、换个角度聊多线程并发编程

    俗话说,双拳难敌四手。俗话还说,人多力量大。在现实生活中,我们通过团队化的方式来获得比单兵作战更高的单位时间内整体产出速度。同样,在编码世界中,为了提升处理效率,并发一直以来都是软件开发设计场景中无法绕过的话题。不管是微观层面的​​单个进程​​内多线程处理模式,还是宏观层面整个系统集群化​​多节点​

  • 面试官:阻塞队列的底层实现有了解过吗?

    前言本节以ArrayBlockingQueue为例,带大家看下阻塞队列是如何实现,一起来看下吧!ArrayBlockingQueue源码分析构造函数同样的,我们先从它的构造函数看起。复制publicArrayBlockingQueue(intcapacity){this(capacity,false

  • Java多线程专题之Lock锁的使用

    Lock基本使用Lock它是java.util.concurrent.locks下的一个接口,它也是用来处理线程同步问题的。复制publicinterfaceLock{voidlock();voidlockInterruptibly()throwsInterruptedException;boole

  • 一篇学会 Go 的 TryLock 实现

    在并发编程中,为了避免多线程同时读写共享资源,我们需要互斥。Go标准库提供了互斥锁sync.Mutex,通过加锁Lock()方法和解锁Unlock()方法达到对共享资源的并发控制。在之前的设计中,当锁被占有,其他goroutine尝试获取锁时会被阻塞。这种方式当然是合理的,但是在某些情况下,或许我们

  • 为什么要用读写锁?它有什么优点?

    读写锁(Readers-WriterLock)顾名思义是一把锁分为两部分:读锁和写锁,其中读锁允许多个线程同时获得,因为读操作本身是线程安全的,而写锁则是互斥锁,不允许多个线程同时获得写锁,并且写操作和读操作也是互斥的。总结来说,读写锁的特点是:读读不互斥、读写互斥、写写互斥。1.读写锁使用在Jav

  • 如何做好“防御性编码”?

    作者| 字白一、防御性编码的意义类似于“防御性驾驶”对驾驶安全的重要性,防御性编码目的概括起来就一条:将代码质量问题消灭于萌芽。要做到“防御性编码”,就要求我们充分认识到代码质量的严肃性,也就是“一旦你觉得这个地方可能出问题,那基本它就会(在某个时刻)出问题”。当然,实际情况比这个更严峻。

  • 你知道吗?Pulsar 也会重复消费?

    背景许久没有分享Java相关的问题排查了,最近帮同事一起排查了一个问题:在使用Pulsar消费时,发生了同一条消息反复消费的情况。排查当他告诉我这个现象的时候我就持怀疑态度,根据之前使用的经验Pulsar在官方文档以及API中都解释过:只有当设置了消费的ackTimeout并超时消费时才会重复投递消

  • 面试突击:Lock、TryLock、LockInterruptibly有什么区别?

    在Lock接口中,获取锁的方法有4个:lock()、tryLock()、tryLock(long,TimeUnit)、lockInterruptibly(),为什么需要这么多方法?这些方法都有什么区别?接下来我们一起来看。lock方法lock方法是Lock接口中最基础的获取锁的方法,当有可用锁时会直

  • 面试突击:线程休眠的方法有几种?

    作者|磊哥来源|Java面试真题解析(ID:aimianshi666)转载请联系授权(微信ID:GG_Stone)在Java中,让线程休眠的方法有很多,这些方法大致可以分为两类,一类是设置时间,在一段时间后自动唤醒,而另一个类是提供了一对休眠和唤醒的方法,在线程休眠之后,可以在任意时间对线程进行唤醒

  • 一文彻底搞懂线程安全问题

    前言关于线程安全问题是一块非常基础的知识,但基础不代表简单,一个人的基本功能往往能决定他是否可以写出高质量、高性能的代码。关于什么是synchronized、Lock、volatile,相信大家都能道出一二,但概念都懂一用就懵,一不小心还能写出一个死锁出来。本文将基于生产者消费者模式加一个个具体案例

  • NIO编程之FileChannel读写锁

    一、FileChannel写文件真的是并发安全的吗?比如说在一个jvm进程内,是可以通过多个线程就使用一个FileChannel来写,是线程安全的,那如果是多个jvm进程呢?此时就没办法保证多线程按照顺序来写文件了,并发写文件,还是可能会有问题的;二、怎么避免多个jvm进程写文件导致的数据出错Fil

  • Go1.18 新特性:TryLock 是什么?需要它吗?

    大家好,我是polarisxu。我们知晓,Go标准库的sync/Mutex、RWMutex实现了sync/Locker接口,提供了Lock()和UnLock()方法,可以获取锁和释放锁,我们可以方便的使用它来控制对共享资源的并发控制。(其他语言,比如Java是有类似TryLock的功能的)复制typ

  • 一篇文章读懂 Python 多线程

     Threading模块从Python1.5.2版开始出现,用于增强底层的多线程模块thread。Threading模块让操作多线程变得更简单,并且支持程序同时运行多个操作。注意,Python中的多线程最好用于处理有关I/O的操作,如从网上下载资源或者从本地读取文件或者目录。如果你要做的是

  • Linux下的进程间通信:共享存储

     学习在Linux中进程是如何与其他进程进行同步的。本篇是Linux下进程间通信(IPC)系列的***篇文章。这个系列将使用C语言代码示例来阐明以下IPC机制:共享文件共享内存(使用信号量)管道(命名的或非命名的管道)消息队列套接字信号在聚焦上面提到的共享文件和共享内存这两个机制之前,这篇

推荐阅读