gpt4 book ai didi

java - 如何在java中制作线程安全的行矩阵

转载 作者:行者123 更新时间:2023-12-01 11:57:23 25 4
gpt4 key购买 nike

我有一个问题:我有一个表示 int 矩阵的结构。我必须对该矩阵的单行进行一些操作,并且该操作必须是线程安全的。我想过锁定整个矩阵,但我只想锁定单行。我怎样才能做到这一点???谢谢

最佳答案

Java 实际上本身并不支持多维数组。二维数组只是数组的数组。

因此,您可以在单行上同步:

synchronized(matrix[row_index]) {
// do stuff with matrix[row_index] here
}

这是假设没有其他代码重新分配matrix[row](数组本身,而不是元素);如果可以,那么您需要一个临时变量来避免竞争条件,另一个线程可能会在您的 synchronized block 中间重新分配它:

int[] the_row = matrix[row_index];
synchronized(the_row) {
// do stuff with the_row here (NOT matrix[row_index])
}

或者,您可以使用单独的锁对象数组:

// a field in your Matrix class
Object[] row_locks;

// initialized like this (probably in your constructor, or whenever the matrix is resized)
for(int row_index = 0; row_index < number_of_rows; row_index++)
row_locks[row_index] = new Object();

// and used like this:
synchronized(row_locks[row_index]) {
// do stuff with the row_index'th row here
}

关于java - 如何在java中制作线程安全的行矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28249858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com