我想基于一些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 {