import java.util.Map;
public class ShareLock {
private static ShareLock instance = null;
private ShareLock() {
}
private Map<String, byte[]> lockpool = new java.util.concurrent.ConcurrentHashMap<String, byte[]>(
1024);
public static ShareLock getInstance() {
if (instance == null) {
synchronized (ShareLock.class) {
instance = new ShareLock();
}
}
return instance;
}
/**
* 这个方法保证同一个key,返回同一个byte[]
*/
public byte[] getShareLock(String key) {
byte[] lock = null;
if (lockpool.containsKey(key)) {
lock = lockpool.get(key);
} else {
lock = new byte[0];
lockpool.put(key, lock);
}
return lock;
}
public void removeShareLock(String key) {
lockpool.remove(key);
}
}
调用的时候如这般
synchronized (ShareLock.getInstance().getShareLock("xxx")) {
try {
... } finally {
ShareLock.getInstance().removeShareLock("xxx");
}
}
只要是相同的key,比如id相同的对象在内存中所有的存在,就返回一个相同的byte数组实例(为什么是byte数组,是因为所有对象中,创建他的开销最小)。通过对这个byte数组实例的锁定来达到锁住 这一组对象!本质是仍然是实例锁,只不过一个实例对应目标对象的多个实例!
分享到:
相关推荐
"Java 读写锁实现原理浅析" Java 读写锁实现原理浅析是 Java 并发编程中一个非常重要的主题。在多线程编程中,读写锁是解决读写并发问题的常用机制。本文主要介绍了 Java 读写锁实现原理浅析,包括读写锁的定义、...
本篇文章将深入探讨如何使用Zookeeper实现分布式共享锁。 分布式锁是一种在多节点之间共享资源的机制,它允许在同一时间只有一个节点对资源进行操作。在Java环境中,我们可以利用Zookeeper的API来创建和管理这种锁...
- 读写锁分为读锁(共享锁)和写锁(独占锁)。读锁允许多个线程同时读取数据,而写锁只允许一个线程进行写操作。 - 当一个线程持有写锁时,其他线程无法获取读锁或写锁,保证了写操作的互斥性。 - 当一个线程...
这可以通过`channel.lock(start, end, shared)`方法实现,其中`start`和`end`定义了锁定的字节范围,`shared`参数指定是共享锁(true)还是独占锁(false)。 3. **获取锁**:尝试获取文件锁。这可能抛出`...
"利用分布式共享锁实现防止方法重复调用"这一主题,主要涉及到如何通过分布式锁来解决这类问题。本文将深入探讨分布式锁的概念、其在防刷单场景中的应用以及如何利用Redis实现分布式锁。 分布式锁是一种在分布式...
Java 锁详解 Java 锁是 Java 并发编程中的一种基本机制,用于确保线程安全和避免竞争条件。Java 锁可以分为两大类:synchronized 锁和 ReentrantLock 锁。 一、Synchronized 锁 1. 锁的原理:synchronized 锁是...
"Java 锁机制 Synchronized" Java 锁机制 Synchronized...Java 锁机制 Synchronized 的实现机制是基于 Monitor 机制的,Monitor 机制是 Java 中的一种同步机制,用于解决多线程并发访问共享资源时可能出现的一些问题。
关于读写锁算法的Java实现及思考,是一个深入探讨了多线程环境下资源访问控制机制的主题。在现代软件开发中,尤其是并发编程领域,读写锁(ReadWriteLock)是一种非常重要的同步工具,它允许多个线程同时进行读操作...
在Java中,ReentrantReadWriteLock类是读写锁的实现,它包含两个锁:读锁(共享锁)和写锁(独占锁)。读锁可以被多个线程同时持有,而写锁是独占的,当写锁被占用时,其他线程既不能获取读锁也不能获取写锁。 5. ...
- `ReadWriteLock`接口提供了一种实现共享锁的方式,其中`ReadLock`实现了共享锁,而`WriteLock`实现了独享锁。 #### 四、互斥锁与读写锁 **1. 互斥锁** 互斥锁也称为独占锁或写锁,它确保同一时间内只有一个线程...
通过`synchronized`关键字,Java虚拟机能够实现对特定资源的独占式访问,从而确保在多线程环境下对共享资源的操作是原子性的。 ##### 1. synchronized方法 当一个线程访问某个对象的一个`synchronized`实例方法时...
Java锁机制是多线程编程中的关键组成部分,用于控制对共享资源的访问,确保并发环境下的数据一致性。本文将深入探讨Java锁机制,并基于提供的"面向Java锁机制的字节码自动重构框架"来讨论其背后的原理和应用。 在...
显式锁则是通过`java.util.concurrent.locks.Lock`接口及其实现类如`ReentrantLock`来实现,提供更细粒度的控制。 锁的释放与建立过程至关重要,因为它们直接影响到线程间的同步行为。在Java内存模型中,_happens-...
### Java中的并发原理与锁实现 #### 一、线程管理与上下文切换 ##### 1.1 什么是上下文切换? 线程在执行过程中拥有自己的运行环境或状态(即上下文),包括程序计数器、虚拟机栈等。当线程因以下原因而退出CPU...
标题和描述概述的知识点主要集中在Java的多线程机制中,特别是`wait`和`notify`方法在同步锁中的应用。这些方法对于控制线程之间的交互至关重要,尤其是在资源有限或需要确保数据一致性的情况下。 ### Java同步锁...
Java 同步锁是Java多线程编程中的关键概念,用于确保多个线程在访问共享资源时能够有序、安全地进行。在这个主题中,我们将详细探讨Java中的同步机制,包括同步方法、同步代码块、synchronized关键字以及其背后的...
Java锁机制是Java多线程编程中的核心概念之一,其主要目的是确保在多线程环境下,多个线程能够安全地访问共享资源,避免数据不一致的问题。Java锁机制的发展历经了多个版本的改进,尤其是Java 5.0引入的显示锁...
在Java中,我们可以使用信号量(Semaphore)来解决不死锁的哲学家问题。信号量是一种同步原语,用于控制对共享资源的访问。在本实现中,我们将创建两个类型的信号量:一个用于表示筷子,另一个用于控制哲学家可以...
- **共享锁**允许多个线程同时持有,Java的ReadWriteLock的读锁就是一个例子。读锁可以被多个线程共享,但写锁是独占的,即写锁存在时,读锁和写锁都无法被其他线程获取。 3. **互斥锁/读写锁** - **互斥锁**(如...