java 按参数锁_java – 基于方法参数的方法调用的细粒度同步/锁定

本文探讨了一种基于方法参数实现细粒度同步的策略,使用`ReentrantLock`为不同参数值创建独立的锁。通过在`ConcurrentPolicyWrapperImpl`类中装饰方法调用来实现并发控制,当传入相同参数时,线程会串行执行,不同参数则并行执行。同时,文章提出了对`getLock`方法同步性的疑问,询问是否需要进一步的同步措施,如使用`synchronized`块,以确保线程安全。
摘要由CSDN通过智能技术生成

我想基于一些id来同步方法调用,例如给定对象实例的并发装饰器.

例如:

使用param“id1”调用该方法的所有线程应该相互串行执行.

所有其余的,使用不同的参数调用方法,称“id2”,应该与使用param“id1”调用方法的线程并行执行,但是再次串行相互执行.

所以在我看来,这可以通过每个这样的方法参数具有锁(http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/locks/ReentrantLock.html)实例来实现.

每次使用param调用该方法时,将查找对应于特定参数值(例如“id1”)的锁实例,并且当前线程将尝试获得锁.

在代码中说:

public class ConcurrentPolicyWrapperImpl implements Foo {

private Foo delegate;

/**

* Holds the monitor objects used for synchronization.

*/

private Map concurrentPolicyMap = Collections.synchronizedMap(new HashMap());

/**

* Here we decorate the call to the wrapped instance with a synchronization policy.

*/

@Override

public Object callFooDelegateMethod (String id) {

Lock lock = getLock(id);

lock.lock();

try {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值