Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中有没有办法锁定(同步)二维数组中的一行?_Java_Arrays_Synchronization_Locking_Dimension - Fatal编程技术网

在java中有没有办法锁定(同步)二维数组中的一行?

在java中有没有办法锁定(同步)二维数组中的一行?,java,arrays,synchronization,locking,dimension,Java,Arrays,Synchronization,Locking,Dimension,在java中有没有办法锁定(同步)二维数组中的一行? 我只想更新一个特定行中的一些条目,并只锁定该行而不是整个数组?要清楚,您需要在一个对象上进行同步。要在阵列的第三行进行同步(请记住从0开始的索引): 例如。更清楚地说,您在对象上同步。要在阵列的第三行进行同步(请记住从0开始的索引): 例如。我们同步一块代码,而不是一个数据结构 您应该封装该数组并同步对它的访问(根据您的要求),以使其线程安全。我们同步的是一块代码,而不是一个数据结构 您应该封装该数组并同步对它的访问(根据您的要求),以使其线

在java中有没有办法锁定(同步)二维数组中的一行?
我只想更新一个特定行中的一些条目,并只锁定该行而不是整个数组?

要清楚,您需要在一个对象上进行同步。要在阵列的第三行进行同步(请记住从0开始的索引):


例如。

更清楚地说,您在对象上同步。要在阵列的第三行进行同步(请记住从0开始的索引):


例如。

我们同步一块代码,而不是一个数据结构


您应该封装该数组并同步对它的访问(根据您的要求),以使其线程安全。

我们同步的是一块代码,而不是一个数据结构


您应该封装该数组并同步对它的访问(根据您的要求),以使其线程安全。

您是否知道该行的索引,或者您是否有办法确定何时到达该特定行?另外,您使用的是常规数组还是java集合类?@Teeg,我使用的是java集合类(对象的ArrayList的ArrayList)并且我要先确定行索引。java synchronized命令是否可以在任何粒度的java对象上操作(例如,我可以执行synchronized{HashMap.get(key),…}键本身是一个对象还是java集合对象?我没有做太多这类事情,但我相信Brian Agnew的回答回答回答了这个问题;他写了我将要写的东西。它基本上是将操作包装在一个同步块中,不管操作有多小。而且,我认为Bhesh Gurung的回答是非常重要;使用同步方法将数组/集合封装在某种管理器类中可能更容易,也更易于维护,同步方法可以满足您在问题中提出的要求。这两种方法都应该有效。您是否知道该行的索引,或者您是否有办法确定何时到达该特定行?另外,您使用的是常规数组还是java集合类?@Teeg,我使用的是java集合类(一个ArrayList of ArrayList of objects)并且我事先确定了行索引。java synchronized命令是否可以在java对象的任何粒度上操作(例如,我可以执行synchronized{HashMap.get(key),…}键本身是一个对象还是java集合对象?我没有做太多这类事情,但我相信Brian Agnew的回答回答回答了这个问题;他写了我将要写的东西。它基本上是将操作包装在一个同步块中,不管操作有多小。而且,我认为Bhesh Gurung的回答是非常重要;使用同步方法将数组/集合封装在某种管理器类中可能更容易,也更易于维护。这两种方法都可以工作。这是一维数组。而且,它只保护对象本身,而不是对象在数组中的位置。不,这是锁定对第三行进行索引(从零开始索引)这会阻止另一个线程修改该行吗?这不只是将该行用作锁吗?@BheshGurung,两者都是正确的。这与任何其他锁都没有区别。如果另一个线程不尝试获取监视器,那么它可以做它想做的任何事情,这是一个一维数组。此外,它只保护对象本身,而不是它在数组中的位置。No、 它正在锁定第三行(从零开始索引)这会阻止另一个线程修改该行吗?这不只是将该行用作锁吗?@BheshGurung,这两个都是真的。这与任何其他锁都没有区别。如果另一个线程不尝试获取监视器,那么它可以做任何它想做的事情—封装+1。我认为这在这个场景中非常重要—封装+1。我认为这很重要在这种情况下很重要
String[][] array = ....
synchronize(array[2]) {
}