2014-04-11 1 views
0

(java.util.ConcurrentModificationException를) 동기화 할 수 없습니다 주기. 하지만 출력에서 ​​두 개의 "시작"을 볼 수 있기 때문에 분명히 작동하지 않는 객체를 잠그고있는 이유는 이해할 수 없습니다.내가이 다음 Java 코드가있다

미리 감사드립니다.

+1

'//일부 GUI 작업을 수행합니다. '는 아마도이 질문에 중요합니다. 이 코드의 어느 시점에서든 요소를 ​​제거하거나 'arbitrages'에 요소를 추가하고 있습니까? – JonK

+0

입력 매개 변수 _arbitrages_를 직접 사용하고 있습니다. 메서드 내에서 코드 스 니펫을 동기화하더라도 중재 참조가 참조하는 동일한 인스턴스를 다른 스레드가 수정하지 못하도록하는 방법은 없습니다. – Seelenvirtuose

답변

1

잠금은 개체을 보호해야하며 코드 세그먼트는 보호해야합니다.

귀하의 경우에는 임의 수집을 허용하고 개인용 자물쇠를 획득하며 컬렉션을 운영합니다. 나머지 코드에서는 컬렉션에 필요한 모든 작업을 수행 할 수 있으며 개인 잠금을 수행 할 필요가 없습니다.

해당 컬렉션의 모든 액세스에 동일한 잠금 장치가 적용되도록 코드를 크게 다시 디자인해야합니다.

0

전체 코드가 없는데 추측에 의지해야하지만 대부분의 경우 두 스레드가 다른 guiUpdateLog -Objects를 사용하고 있습니다. 내 추측에 따르면 그들은 guiUpdateLock을 포함하는 클래스의 다른 인스턴스를 사용하고 있으며 정적이어서 다른 Object 인스턴스도 존재합니다.