두 가지 유형의 반복자를 지원합니다. 첫 번째는 빠르게 실패하고 두 번째는 안전한 방법입니다. 이는 Java에서 예외 처리와 관련하여 중요한 역할을합니다. 'Fail Fast 및 Fail Safe Iterators'에 대한이 기사에서는 두 반복자의 작동 방식과 이들의 근본적인 차이점을 분석 할 것입니다.
다음은이 기사에서 논의 할 포인터입니다.
자세한 설명을 시작하기 전에 Concurrent Modification의 개념을 숙지하십시오.
동시 수정
단일 스레드 (또는 다중 스레드)가 컬렉션을 반복 할 때 컬렉션의 요소를 추가 또는 삭제하거나 특정 위치에서 요소의 값을 업데이트하여 컬렉션의 구조를 변경할 수 있습니다. 이 프로세스를 동시 수정이라고합니다.
위의 주제와 관련된 두 가지 시스템을 빠르게 살펴보고 동일한 내용을 자세히 살펴 보겠습니다.
Fail Fast Sysetm :
시스템은 오류 발생 후 즉시 종료되는 경우 Fail Fast 시스템으로 레이블이 지정됩니다. 작업이 즉시 중단되고 실패 또는 오류가 노출됩니다.
페일 세이프 시스템 :
시스템은 오류 또는 오류가 발생한 후에도 계속 작동하는 경우 페일 세이프 시스템이라는 레이블이 지정됩니다. 작업을 중단하지 않고 오류를 노출하는 대신 숨 깁니다.
자바의 반복자를 사용하면 Collection 객체를 순회 할 수 있습니다. 컬렉션에서 반환하는 반복기는 실패가 빠르거나 본질적으로 안전합니다.
Fail Fast Iterator
Java의 Fail fast iterator는 컬렉션을 반복하는 동안 컬렉션에 대한 모든 유형의 구조적 수정을 허용하지 않습니다. 구조적 수정에는 컬렉션을 반복하는 동안 컬렉션의 요소 추가, 제거 또는 업데이트가 포함됩니다. 반복 프로세스 중에 컬렉션이 구조적으로 수정되면 반복기는 ConcurrentModificationException을 throw합니다.
그러나 항목이 반복기 자체 메서드 (예 : remove () 메서드)를 사용하여 제거되는 경우 예외가 발생하지 않는다는 점에 유의해야합니다. 완전히 안전한 프로세스입니다. 당신이 가지고 있는지 확인하십시오 자바 설치 시스템에서
Fail Fast Iterator의 예 :
import java.util.HashMap import java.util.Iterator import java.util.Map public class FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ( '1', '1 월 ') monthIndex.put ('2 ','2 월 ') monthIndex.put ('3 ','March ') 반복기 반복기 = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // Map에 요소를 추가하면 // next () 메소드의 다음 호출에서 예외가 발생합니다. monthIndex.put ( '4', '4 월')}}}
산출:
스레드 'main'java.util.ConcurrentModificationException의 예외
at java.util.HashMap $ HashIterator.nextEntry (알 수없는 소스)
이제 Fail Safe Iterator를 살펴 보겠습니다.
Fail Safe Iterator
Fail Fast 반복기와 달리 Fail Safe 반복기는 반복 프로세스 중에 컬렉션이 수정되는 경우 예외를 발생시키지 않습니다. 이는 실제 컬렉션 대신 컬렉션의 복제본에서 반복되기 때문입니다. 실제 컬렉션에서 이루어진 구조적 수정은 눈에 띄지 않습니다.
그러나 진정한 Fail Safe Iterator와 같은 것은 없다는 점에 유의해야합니다. Weakly-Consistent라고 부르는 것이 적절할 것입니다. 이것은 단순히 만약 컬렉션은 반복 프로세스 중에 수정되며 Iterator가 보는 것은 약하게 보장됩니다. 이 동작은 컬렉션마다 다르며 Javadocs에 문서화되어 있습니다.
Fail Safe Iterator의 예 :
public class FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ( '1', 'January') monthIndex.put ( '2', 'February') monthIndex.put ( '3', 'March') 반복기 iterator = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( '4', '4 월')}}}
산출:
- 일월
- 이월
- 행진
마지막으로이 기사에서는이 반복자를 비교하고
차이점 : Fail Fast 및 Fail Safe Iterator
다음은 두 반복기 간의 근본적인 차이점입니다.
매개 변수 | Fail Fast Iterator | Fail Safe Iterator |
ConcurrentModification 예외 발생 | 예, 컬렉션이 반복되는 동안 수정되면 CocurrentModificationExcepti-on이 발생합니다. | 아니요, 컬렉션을 반복하는 동안 컬렉션이 수정되면 예외가 발생하지 않습니다. |
컬렉션 복제 | 아니요, 원래 컬렉션을 사용하여 요소를 탐색합니다. | 예, 원본 컬렉션의 복사본을 사용하여 순회합니다. |
메모리 오버 헤드 | 아니요, 추가 메모리가 필요하지 않습니다. | 예, 컬렉션을 복제하려면 추가 메모리가 필요합니다. 더 나은 qtp 대 셀레늄 |
예 | HashMap, 벡터, ArrayList, HashSet | CopyOnWriteArrayList |
이러한 반복기는 Java의 다목적 언어에서 독특하고 많이 필요합니다. 페일 세이프에는 편안한 고리가 있지만 Fail Fast 반복기는 견고 함이 입증되었습니다.
이것으로이 기사가 끝납니다. 자세한 내용은 다음을 확인하십시오. 에듀 레카. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Java 프로그래밍을 시작하고 Hibernate & Spring과 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념에 대해 교육하도록 설계되었습니다.
질문이 있으십니까? 이 'Fail Fast vs Fail Safe'블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 연락 드리겠습니다.