2017-03-25 1 views
0

Java의 Array List와 Vector 클래스가 멀티 스레딩에서 잘못된 선택임을 알고 있습니다. Array List가 동기화되지 않았다는 것을 알았습니다. 그 이유는 멀티 스레딩에서 좋지 않습니다. 다중 스레드를 사용하여 Java에서 동기화 된 벡터 클래스의 성능이 떨어지는 이유를 알고 싶습니다.Java Collection의 Vector Class가 멀티 스레딩에서 성능이 떨어지는 이유는 무엇입니까?

그 이유는 무엇입니까?

답변

2

벡터는 모든 메소드에 대해 데이터에 대한 액세스를 개별적으로 동기화합니다.

동기화가 필요하지 않지만 벡터에서 제거 할 수없는 경우가 있습니다. 이러한 경우 벡터는 불필요한 동기화에 여전히 비용이 들기 때문에 비효율적입니다.

반면에 전체 메서드 호출 시퀀스가 ​​동기화되어야 할 수도 있습니다. 그런 다음 Vector의 메서드에 대한 개별 동기화는 쓸모가 없으며 성능 비용이 추가됩니다.

ArrayList는 멀티 스레드 프로그램에서 사용할 수 있지만 외부 동기화를 사용할 수 있습니다.

주제에 대해 자세히 이해하려면 Java Concurrency in Prctice을 읽는 것이 좋습니다. 외부/내부 동기화, 동시 수집 및 동기화 방법의 차이점을 실제로 알기 위해 필요한 많은 정보를 얻는 데 도움이됩니다.

+0

배열 목록 또는 연결된 목록 방법을 외부에서 동기화 할 수 있습니까 ?? –

+1

물론 : Collections.synchronizedList()를 사용하십시오. –

관련 문제