잠금 배열을 사용하여 데이터베이스의 동일한 항목에 대한 동시 액세스를 보호하고 있습니다. 배열의 각 항목은 데이터베이스의 항목을 나타냅니다하지만 프로그램으로 성장할 수있는 데이터베이스가 실행됩니다, 그래서 동적에서처럼, 그것은 성장하기 위해 java.utils.Arrays.copyOf
를 사용하여 계획되었다여러 스레드가 사용하는 개체를 다시 할당하십시오.
lockArray = Arrays.copyOf(lockArray, lockArray.length + 1);
내 질문이있는 경우입니다 동시 실행에 문제가 발생할 수 있습니다. 예를 들어, 스레드가 복사가 완료 될 때 lockArray에서 읽으려는 경우 내가 생각할 수있는 문제는 copyOf 연산이 (내가 모르는) 원 자성이 아니라면, 배열이 복사되어 동일하게 변경되어 불일치가 발생하는 것입니다.
그렇다면이 문제를 피할 수있는 방법이 있습니까?
(배열이 항상 커지고 결코 줄어들지 않으며 lockArray의 데이터베이스 항목 색인은 배열이 몇 번이나 증가했는지에 관계없이 항상 동일하다는 점은 주목할 가치가 있습니다.)
처음에는'lockArray'에 대해 생각하지 마십시오. 동시에 여러 스레드가 시도 할 경우 데이터베이스 자체를 확장하는 것이 어떻게 작동하는지 확인합니까? 데이타베이스의 성장을 지키고있는 자물쇠가 있다면, 간단하게'lockArray'의 확장을 같은 자물쇠에 두십시오. – Holger
@Holger 데이터베이스가 자체 코드가 아닌 외부로 확장되었습니다. 코드는 항목을 읽거나 업데이트 할 수만 있고 항목을 만들 수는 없습니다. – user2891462
아무 것도 변경되지 않습니다. 여전히 데이터베이스가 외부 적으로 변경되었는지 또는 어떤 결정을 내리는지를 감지했기 때문에 더 큰'lockarray '가 필요하다고 생각합니다. 이때 다중 스레드가 동일한 작업을 동시에 수행하지 않도록해야합니다. 어떻게해야합니까? – Holger