매트릭스를 만들기 위해 동시 해시 맵을 사용했습니다. 범위는 100k입니다. 40 개의 스레드를 만들었습니다. 각 스레드는 행렬의 해당 요소에 액세스하여이를 수정하고 행렬을 다음과 같이 다시 씁니다.동시 HashMap 반복자 : 스레딩에 얼마나 안전한가요?
ConcurrentHashMap<Integer, ArrayList<Double>> matrix =
new ConcurrentHashMap<Integer, ArrayList<Double>>(25);
for (Entry(Integer,ArrayList<Double>)) entry: matrix.entrySet())
upDateEntriesOfValue(entry.getValue());
스레드 안전성을 찾지 못했습니다. 값은 종종 null로 반환되고 프로그램이 중단됩니다. thread safe.Or 스레드 안전하고 다른 곳에서 버그가 있습니다. 한 가지는 내 프로그램이 단일 스레드 모드에서 충돌하지 않는다는 것입니다.
동기화 된 arraylist를 사용하도록 제안 하시겠습니까? – thetna
동기화 된 arraylist는 한 번에 하나의 스레드에서만 액세스하므로 작동합니다. 그러나 요소를 추가하고 읽는 방법에 따라 미리 크기를 알고 특정 인덱스에 액세스하려는 경우''LinkedBlockingQueue' 또는 java.util.concurrent.atomic 배열을 사용해보십시오. 대부분 당신의 필요에 달려 있습니다. –
동기화 된 배열 목록을 사용해 보셨습니까? 문제가 해결 되었습니까? –