|
SSISO Community검색 |
|
SSISO Community메뉴 |
|
SSISO Community카페 |
|
블로그 카테고리 |
|
|
Synchronized로 검색한 결과 |
|
등록일:2008-03-06 09:29:05 작성자: 제목:collection에서의 동기화 방법 |
|
collection에서의 동기화 방법이 있다고 들었는데..
예를 들어 ArrayList에서는
List AccountList = Collections.SynchronizedList(new ArrayList());
이렇게 하라고 들었는데 단순히 이렇게 하면 해당 리스트에 대해 동기화가 되는지 궁금합니다...
그런데 자바 API문서를 보면
Synchronized(list) {
Iterator i = list.iterator(); // Must be in Synchronized block
while (i.hasNext())
foo(i.next());
}
이부분도 있는데...동기화 하는데 어떤 기능을 하는지 알고 싶습니다..
제가 보기에는 단순히 블럭안에만 동기화 시키는거 같은데요...
그리고 간단히 ArrayList에대해 동기화 예제좀 만들어 주세요..
-----------------------------------------------------------------------------------------
Collections의 SynchronizedList메서드는
받은 List 객체가 instanceof RandomAccess 일 때
SynchronizedRandomAccessList 객체로 변환해서 반환하고
아닐 때는 SynchronizedList객체로 변환해서 반환합니다.
SynchronizedRandomAccessList 나 SynchronizedList는
SynchronizedList를 상속하는 클래스인데
SynchronizedList는 SynchronizedCollection를 상속하는 클래스입니다.
SynchronizedList는 생성시 부모인 SynchronizedCollection의 생성자를 호출하고
이 생성자는 mutax = this;라는 코드를 담고 있습니다.
mutax는 Object형 변수입니다.
이걸 말씀 드리는 이유는
SynchronizedList 클래스의
모든 메서드가 mutax를 통해
동기화되기 때문입니다.
자세히는 잘 모르겠으나 제 생각에 API 문서에 나오기를
"SynchronizedList메서드로 부터 반환된 객체를 iterating 할 때는
좋게 말로할 때 니가 직접 동기화해야된다."(완역 ^^;)
라고 하는 것을 보면 iterator와 관련된 부분에 한해서
동기화가 따로 필요한 것으로 보입니다.
결론적으로,
Collections.SynchronizedList메서드의 인수로 넣은 List는
동기화된 List가 되어 반환되는데
그 List를 iterating 할 때만
따로 사용자가 동기화를 해주어야 한다~ 라는 것으로 보입니다.
출처 : http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10106&eid=CcNaEq3hw3stAKDGHqyJKYWVYQErZPkn&qb=wNq52SBjb2xsZWN0aW9u |
|
|
|
|
|