when to use reentrant lock

The answer is pretty simple -- use it when you actually need something it provides that synchronized doesn‘t,

like timed lock waits, interruptible lock waits, non-block-structured locks, multiple condition variables, or lock polling.

ReentrantLock also has scalability benefits, and you should use it if you actually have a situation that exhibits high contention,

but remember that the vast majority of synchronized blocks hardly ever exhibit any contention, let alone high contention.

I would advise developing with synchronization until synchronization has proven to be inadequate,

rather than simply assuming "the performance will be better" if you use ReentrantLock. Remember, these are advanced tools for advanced users.

(And truly advanced users tend to prefer the simplest tools they can find until they‘re convinced the simple tools are inadequate.)

As always, make it right first, and then worry about whether or not you have to make it faster.

时间: 2024-12-16 01:29:33

when to use reentrant lock的相关文章

curator 锁之 Shared Reentrant Lock

1.描述 共享锁:全局同步分布式锁,同一时间两台机器只能有一台获得锁 2.参与类 InterProcessMutex 3.用法 3.1 创建 InterProcessMutex 实例 public InterProcessMutex(CuratorFramework client, String path) Parameters: client - client path - the path to lock 3.2 一般用法 用其中一个方法,获取锁 public void acquire()

python之多线程 threading.Lock() 和 threading.RLock()

0.目录 2. threading.Lock() 的必要性3.观察block4.threading.RLock() 的应用场景 1.参考 Thread Synchronization Mechanisms in Python count += 1 不是原子操作,三步操作可能被中断,通过lock将三步操作"封装"为一步操作,要么执行,要么不执行. counter = 0 def process_item(item): global counter ... do something wit

Java锁----Lock实现原理

Lock完全用Java写成,在java这个层面是无关JVM实现的. 在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock.ReadWriteLock(实现类ReentrantReadWriteLock),其实现都依赖java.util.concurrent.AbstractQueuedSynchronizer类,实现思路都大同小异,因此我们以ReentrantLock作为讲解切入点. 1. ReentrantLock的调用过程 经过

java之Lock的实现原理

0. 前言 与synchronized不同的是,Lock完全用Java写成,在java这个层面是无关JVM实现的. 在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock.ReadWriteLock(实现类ReentrantReadWriteLock),其实现都依赖java.util.concurrent.AbstractQueuedSynchronizer类,实现思路都大同小异,因此我们以ReentrantLock作为讲解切入点.

06.Curator分布式锁

锁:分布式的锁全局同步,这意味着任何一个时间点不会有两个客户端都拥有相同的锁. 1.可重入锁Shared Reentrant Lock 首先我们先看一个全局可重入的锁(可以多次获取,不会被阻塞).Shared意味着锁是全局可见的,客户端都可以请求锁.Reentrant和JDK的ReentrantLock类似,意味着同一个客户端在拥有锁的同时,可以多次获取,不会被阻塞. 1.可重入锁相关类介绍 它是由类InterProcessMutex来实现.它的主要方法: // 构造方法 public Inte

03.Curator深入使用

1.Apache Curator简介 Curator提供了一套Java类库,可以更容易的使用ZooKeeper.ZooKeeper本身提供了Java Client的访问类,但是API太底层,不宜使用,易出错.Curator提供了三个组件.Curator client用来替代ZOoKeeper提供的类,它封装了底层的管理并提供了一些有用的工具.Curator framework提供了高级的API来简化ZooKeeper的使用.它增加了很多基于ZooKeeper的特性,帮助管理ZooKeeper的连

threading模块

threading — Higher-level threading interface¶ Source code: Lib/threading.py This module constructs higher-level threading interfaces on top of the  lower level thread module. See also the mutex and Queue modules. The dummy_threading module is provide

J.U.C并发框架

转载:http://itindex.net/detail/48869-j.u.c-%E6%A1%86%E6%9E%B6 J.U.C并发框架 作者:Doug Lea SUNY Oswego Oswego NY 13126 [email protected] 翻译:书卷多情 在J2SE1.5中,java.util.concurrent包下的大部分同步工具(锁.屏障等)以AbstractQueuedSynchronizer类为基础来构建.这个框架提供了一些常用机制用于自动管理并发状态.阻塞及非阻塞线程

java多线程编程

一.多线程的优缺点 多线程的优点: 1)资源利用率更好2)程序设计在某些情况下更简单3)程序响应更快 多线程的代价: 1)设计更复杂虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般都更复杂.在多线程访问共享数据的时候,这部分代码需要特别的注意.线程之间的交互往往非常复杂.不正确的线程同步产生的错误非常难以被发现,并且重现以修复. 2)上下文切换的开销当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指