问题描述
因此,我正计划让多个线程访问作为2D数组的共享资源。 每个对象将一次访问一个索引以设置对象的内容,如下所示。
单元是数组的每个对象组成的。
RandomObject只是将在Cell内的类的临时名称。
所以这段代码的目的是检查矩阵是否被占用,因此是否为空。
public class Cell
{
private reentrantlock lock;
private RandomObject currentObject;
public Cell()
{
lock = new reentrantlock();
}
public boolean hasRandomObject()
{
boolean successfulLock = lock.tryLock();
boolean randomObjectStatus = false;
if (successfulLock)
{
if (currentObject != null)
{
randomObjectStatus = true;
}
System.out.println("Lock released.");
}
return randomObjectStatus;
}
public boolean setRandomObject(RandomObject inRandomObject)
{
boolean successfulLock = lock.tryLock();
if (successfulLock)
{
if (currentObject != null)
{
successfulLock = false;
}
else
{
currentObject = inRandomObject;
}
//Inner lock release
lock.unlock();
}
return successfulLock;
}
public boolean remove()
{
boolean successfulLock = lock.tryLock();
if (successfulLock)
{
if (currentObject != null)
{
currentObject.endThread();
currentObject = null;
}
lock.unlock();
}
return successfulLock;
}
}
public class Map
{
private Cell[][] map;
private int width,height;
public Map(int inRowSize,int inColumnSize)
{
map = new Cell[inRowSize][inColumnSize];
width = map.length;
height = map[0].length;
for (int i = 0; i < map.length; i++)
{
System.out.println(map[i].length);
for (int j = 0; j < map[i].length; j++)
{
map[i][j] = new Cell();
}
}
}
}
那么一点点背景。
-
endThread只是RandomObject内部的一种用于结束线程的方法,因为每个RandomObject都有自己的线程。
只想检查一下我是否正确使用了可重入锁,并使此类成为Threadsafe类,因为可能有1 .. *个线程试图占据这些单元格。
也希望讨论有关任何更好的选项,优化或改进的意见。
我通常使用监视器,并希望使用ConcurrentLocks来添加功能,因此我可以访问tryLock来立即知道它是否成功。
干杯。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)