如何使2D数组具有线程安全性

时间:2020-09-03 06:00:31

标签: java multithreading multidimensional-array synchronization thread-safety

因此,我有一个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。

任何建议将不胜感激。 温馨的问候

0 个答案:

没有答案