`
supben
  • 浏览: 329184 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 共享锁实现

 
阅读更多
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数组实例的锁定来达到锁住 这一组对象!本质是仍然是实例锁,只不过一个实例对应目标对象的多个实例!
0
0
分享到:
评论
1 楼 huozhedecctv 2014-09-30  
你不认为这是排他锁?

相关推荐

    Java 读写锁实现原理浅析

    "Java 读写锁实现原理浅析" Java 读写锁实现原理浅析是 Java 并发编程中一个非常重要的主题。在多线程编程中,读写锁是解决读写并发问题的常用机制。本文主要介绍了 Java 读写锁实现原理浅析,包括读写锁的定义、...

    使用zookeeper实现分布式共享锁

    本篇文章将深入探讨如何使用Zookeeper实现分布式共享锁。 分布式锁是一种在多节点之间共享资源的机制,它允许在同一时间只有一个节点对资源进行操作。在Java环境中,我们可以利用Zookeeper的API来创建和管理这种锁...

    java 读写锁代码

    - 读写锁分为读锁(共享锁)和写锁(独占锁)。读锁允许多个线程同时读取数据,而写锁只允许一个线程进行写操作。 - 当一个线程持有写锁时,其他线程无法获取读锁或写锁,保证了写操作的互斥性。 - 当一个线程...

    java文件锁的实现

    这可以通过`channel.lock(start, end, shared)`方法实现,其中`start`和`end`定义了锁定的字节范围,`shared`参数指定是共享锁(true)还是独占锁(false)。 3. **获取锁**:尝试获取文件锁。这可能抛出`...

    利用分布式共享锁实现防止方法重复调用

    "利用分布式共享锁实现防止方法重复调用"这一主题,主要涉及到如何通过分布式锁来解决这类问题。本文将深入探讨分布式锁的概念、其在防刷单场景中的应用以及如何利用Redis实现分布式锁。 分布式锁是一种在分布式...

    java锁机制Synchronizedjava锁机制Synchronized

    "Java 锁机制 Synchronized" Java 锁机制 Synchronized...Java 锁机制 Synchronized 的实现机制是基于 Monitor 机制的,Monitor 机制是 Java 中的一种同步机制,用于解决多线程并发访问共享资源时可能出现的一些问题。

    java锁详解.pdf

    Java 锁详解 Java 锁是 Java 并发编程中的一种基本机制,用于确保线程安全和避免竞争条件。Java 锁可以分为两大类:synchronized 锁和 ReentrantLock 锁。 一、Synchronized 锁 1. 锁的原理:synchronized 锁是...

    关于读写锁算法的Java实现及思考

    关于读写锁算法的Java实现及思考,是一个深入探讨了多线程环境下资源访问控制机制的主题。在现代软件开发中,尤其是并发编程领域,读写锁(ReadWriteLock)是一种非常重要的同步工具,它允许多个线程同时进行读操作...

    彻底理解Java中的各种锁.pdf

    在Java中,ReentrantReadWriteLock类是读写锁的实现,它包含两个锁:读锁(共享锁)和写锁(独占锁)。读锁可以被多个线程同时持有,而写锁是独占的,当写锁被占用时,其他线程既不能获取读锁也不能获取写锁。 5. ...

    Java锁的种类以及区别

    - `ReadWriteLock`接口提供了一种实现共享锁的方式,其中`ReadLock`实现了共享锁,而`WriteLock`实现了独享锁。 #### 四、互斥锁与读写锁 **1. 互斥锁** 互斥锁也称为独占锁或写锁,它确保同一时间内只有一个线程...

    Java的锁机制的学习和使用

    通过`synchronized`关键字,Java虚拟机能够实现对特定资源的独占式访问,从而确保在多线程环境下对共享资源的操作是原子性的。 ##### 1. synchronized方法 当一个线程访问某个对象的一个`synchronized`实例方法时...

    面向Java锁机制的字节码自动重构框架.zip

    Java锁机制是多线程编程中的关键组成部分,用于控制对共享资源的访问,确保并发环境下的数据一致性。本文将深入探讨Java锁机制,并基于提供的"面向Java锁机制的字节码自动重构框架"来讨论其背后的原理和应用。 在...

    java锁的释放与建立

    显式锁则是通过`java.util.concurrent.locks.Lock`接口及其实现类如`ReentrantLock`来实现,提供更细粒度的控制。 锁的释放与建立过程至关重要,因为它们直接影响到线程间的同步行为。在Java内存模型中,_happens-...

    本文主要介绍java中并发的原理还有Java中锁实现的原理

    ### Java中的并发原理与锁实现 #### 一、线程管理与上下文切换 ##### 1.1 什么是上下文切换? 线程在执行过程中拥有自己的运行环境或状态(即上下文),包括程序计数器、虚拟机栈等。当线程因以下原因而退出CPU...

    Java 同步锁 wait notify 学习心得

    标题和描述概述的知识点主要集中在Java的多线程机制中,特别是`wait`和`notify`方法在同步锁中的应用。这些方法对于控制线程之间的交互至关重要,尤其是在资源有限或需要确保数据一致性的情况下。 ### Java同步锁...

    java-syn.zip_Java syn_Java syn锁_java同步锁syn_java锁 syn_syn同步事务锁

    Java 同步锁是Java多线程编程中的关键概念,用于确保多个线程在访问共享资源时能够有序、安全地进行。在这个主题中,我们将详细探讨Java中的同步机制,包括同步方法、同步代码块、synchronized关键字以及其背后的...

    Java锁机制详解.pdf

    Java锁机制是Java多线程编程中的核心概念之一,其主要目的是确保在多线程环境下,多个线程能够安全地访问共享资源,避免数据不一致的问题。Java锁机制的发展历经了多个版本的改进,尤其是Java 5.0引入的显示锁...

    不死锁的哲学家问题实现 java

    在Java中,我们可以使用信号量(Semaphore)来解决不死锁的哲学家问题。信号量是一种同步原语,用于控制对共享资源的访问。在本实现中,我们将创建两个类型的信号量:一个用于表示筷子,另一个用于控制哲学家可以...

    Java中的锁分类与使用.docx

    - **共享锁**允许多个线程同时持有,Java的ReadWriteLock的读锁就是一个例子。读锁可以被多个线程共享,但写锁是独占的,即写锁存在时,读锁和写锁都无法被其他线程获取。 3. **互斥锁/读写锁** - **互斥锁**(如...

Global site tag (gtag.js) - Google Analytics