질문 : 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
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
Java에서 사용할 수있는 Gradle의 변수를 선언 (0) | 2021.06.16 |
---|---|
Java에서 getPath (), getAbsolutePath () 및 getCanonicalPath ()의 차이점 (0) | 2021.06.15 |
자바 스크립트에서 localStorage를 재설정 / 삭제하는 방법 (0) | 2021.06.13 |
자바 스크립트의 함수 오버로딩-모범 사례 (0) | 2021.06.10 |
스택 추적을 잃지 않고 Java에서 예외 다시 던지기 (0) | 2021.06.09 |