ReentrantLock可重入原理以及JUC并发工具

137 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

ReentrantLock可重入原理

我们讲到了ReentrantLock,大家都知道ReentrantLock是可重入的锁,那么ReentrantLock是如何实现可重入性的?简单了说:

ReentrantLock内部自定义了同步器Sync(Sync既实现了AQS,又实现了AOS,而AOS提供了一种互斥锁持有的方式),其实就是加锁的时候通过CAS算法,将线程对象放到一个双向链表中,每次获取锁的时候,看下当前维护的那个线程ID和当前请求的线程ID是否一样,一样就可重入了。 这就是ReentrantLock可重入的大概的实现原理。

JUC下的并发工具

JUC中的哪些并发工具: 通常所说的并发包(JUC)也就是java.util.concurrent及其子包,集中了Java并发的各种基础工具类,具体主要包括几个方面:

  • 提供了CountDownLatch、CyclicBarrier、Semaphore等,比Synchronized更加高级,可以实现更加丰富多线程操作的同步结构。
  • 提供了ConcurrentHashMap、有序的ConcunrrentSkipListMap,或者通过类似快照机制实现线程安全的动态数组CopyOnWriteArrayList等,各种线程安全的容器
  • 提供了ArrayBlockingQueue、SynchorousQueue或针对特定场景的PriorityBlockingQueue等,各种并发队列实现。
  • 强大的Executor框架,可以创建各种不同类型的线程池,调度任务运行等。

大家可以看到,JUC下给我们提供了这么多并发工具供我们使用,其实只有我们掌握了其中的原理之后,我们才能应用到位,才能更好的应用于工作中。

好了,今天的分享先到这里,如果你对ReentrantLock还有什么疑问,欢迎在评论区留言,我们一起学习成长,记得点赞么么哒。