/** * galaxy inc. * meetup client for android */ package com.galaxy.picasa.sync; import java.util.HashSet; import java.util.Set; import com.android.gallery3d.common.Utils; /** * 同步锁管理器 * @author sihai * */ public class SyncLockManager { private final Set<SyncLock> mLocks = new HashSet<SyncLock>(); SyncLockManager() { } public final SyncLock acquireLock(int type, Object key) throws InterruptedException { SyncLock synclock = null; synchronized (mLocks) { for (synclock = new SyncLock(type, key); !mLocks.add(synclock); mLocks.wait()) ; } return synclock; } public final class SyncLock { private Object mKey; private int mType; SyncLock(int type, Object key) { super(); mType = type; mKey = key; } public final boolean equals(Object obj) { if (this == obj) { return true; } if (null == obj) { return false; } if (!(obj instanceof SyncLock)) { return false; } SyncLock synclock = (SyncLock) obj; if (mType != synclock.mType || !mKey.equals(synclock.mKey)) { return false; } return true; } public final int hashCode() { return mType ^ mKey.hashCode(); } public final void unlock() { synchronized (mLocks) { Utils.assertTrue(mLocks.remove(this)); mLocks.notifyAll(); } } } }