因此,我有一个2D数组,该数组将具有从一个索引移动到另一个索引(例如从索引A-B到另一个索引)的对象。在移动期间,不能在A或B内存储其他对象。
最初,我在考虑使用ReentrantLocks,但显然不允许这样做。如果每个广场都有自己的锁,我也担心性能瓶颈。
然后,我虽然要使用AtomicReferences,但似乎并没有给我我想要的功能,因为我需要一种方法来检查数组的两个索引是否被占用。
我想到的一种方法是使用互斥锁。 但是我对如何使用此互斥锁一次锁定特定数组索引感到困惑。 如果我要使用互斥锁,这就是我的想法。
因此,在此示例中,我有一个对象数组,其中每个对象都有自己的同步set方法。该对象将显示在下面。
public class ExampleObject
{
private Object monitor = new Object();
private StoredObject storedObject;
public void set(StoredObject inStoredObject)
{
boolean setStatus = false;
synchronized(mutex)
{
if (storedObject == null)
{
storedObject = inStoredObject;
setStatus = true;
}
}
return setStatus;
}
public StoredObject get()
{
synchronized(mutex)
{
return storedObject;
}
}
public void clear()
{
synchronized(mutex)
{
storedObject = null;
}
}
}
我必须检查StoredObject是否为null,因为如果一个已经存在,我不希望设置StoredObject。 因此,我添加了一个清晰的方法,因为我的想法是,如果StoredObject从索引A-> B移动。它可以将自身的副本保留在A内,当成功在B内时将其从A中删除(因为传输不是瞬时的)并需要500毫秒)。
我被允许使用阻塞队列,监视器和volatile。
任何建议将不胜感激。 温馨的问候