프로그래밍 언어/JAVA

Java Vector (및 Stack) 클래스가 더 이상 사용되지 않거나 더 이상 사용되지 않는 이유

Rateye 2021. 6. 15. 10:39
728x90
반응형
질문 : Java Vector (및 Stack) 클래스가 더 이상 사용되지 않거나 더 이상 사용되지 않는 이유는 무엇입니까?

Java Vector가 더 이상 사용되지 않거나 폐기 된 레거시 클래스로 간주되는 이유는 무엇입니까?

동시성으로 작업 할 때 사용이 유효하지 않습니까?

그리고 객체를 수동으로 동기화하고 싶지 않고 기본 배열의 새 복사본을 만들 필요없이 스레드로부터 안전한 컬렉션을 사용하려는 경우 ( CopyOnWriteArrayList Vector 를 사용하는 것이 좋습니까?

Vector 의 하위 클래스 인 Stack 은 어떻습니까? 대신 무엇을 사용해야합니까?

답변

Vector 는 각 개별 작업에서 동기화됩니다. 그것은 당신이하고 싶은 일이 거의 없습니다.

일반적으로 전체 작업 시퀀스를 동기화하려고합니다. (당신으로 반복 넘는 경우 개별 작업을 동기화하면 모두 덜 안전 Vector , 예를 들어, 당신은 여전히 피하기 원인 것과 같은 시간에 수집을 변경 다른 사람에 잠금 꺼낼 필요 ConcurrentModificationException 도하지만 반복하는 스레드에서)를 더 느리게 (한 번이면 충분할 때 반복해서 자물쇠를 꺼내는 이유)?

물론 필요하지 않은 경우에도 잠금 오버 헤드가 있습니다.

기본적으로 대부분의 상황에서 동기화에 대한 매우 결함이있는 접근 방식입니다. Brian Henk가 Collections.synchronizedList 와 같은 호출을 사용하여 컬렉션을 장식 할 수 있습니다. Vector 가 "크기 조정 된 배열"컬렉션 구현과 "모든 작업 동기화"비트를 결합한다는 사실은 잘못된 디자인의 또 다른 예입니다. 장식 접근 방식은 관심사를 더 깔끔하게 분리합니다.

Stack 등가물에 관해서 Deque / ArrayDeque 에서 시작하겠습니다.

출처 : https://stackoverflow.com/questions/1386275/why-is-java-vector-and-stack-class-considered-obsolete-or-deprecated
728x90
반응형