问题描述
因此,我将要使用大小为x * y的矩阵。它将由特定类的对象组成。
现在我的条件是我需要确保没有其他线程能够一次访问两个数组位置。因为使用矩阵的线程将从第一个位置移动到第二个位置,并且必须在两个位置上都具有锁定,直到任务完成。
我期望大约有1..10个线程可以访问Matrix,但是可能更多。 因为需要这么多线程,所以我将拥有一个ThreadPool和一个执行程序。
我希望这样的事情是可能的。我将矩阵内部的对象用作锁本身。
synchronized (matrix[x][y] && matrix[x][y+1]) //Where y+1 is just an example,it could be x+1,x-1.. etc.
{
//In here I would be doing my modifications to the locations in the matrix I have locked.
}
我不想锁定整个行或列,因为这对于我尝试的操作效率不高。
当这些想法在我脑海中浮现时,我希望对此进行一些讨论。
干杯。
解决方法
一种方法可能是将具有相同大小的单独“锁矩阵”初始化为0
或false
。
在处理对象的真实矩阵之前,线程将请求访问该矩阵的两个位置。授予访问权限后,“锁定矩阵”会将两个条目设置为1
或true
,并拒绝访问请求相同条目的其他线程。