본문
동기화(Synchronization)
# 동기화(Synchronization)
멀티쓰레드(multi-thread) 프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 수 있기 때문에
데이터의 일관성(consistency)을 유지하기 위해서는 동기화(Synchronization)가 필요하다.
Vector와 Hashtable과 같은 구버전의 클래스들은 자체적으로 동기화 처리가 되어 있는데, 멀티쓰레드 프로그래밍이 아닌 경우에는 불필요한 기능이 되어 성능을 떨어뜨리는 요인이 된다.
그래서 새로 추가된 ArrayList와 HashMap과 같은 컬렉션은 동기화를 자체적으로 처리하지 않고 필요한 경우에만 java.util.Collection클래스의 동기화 메서드를 이용해서 동기화 처리가 가능하도록 변경하였다.
이 밖에도 여러 가지 이유로, 가능하면 Vector보다는 ArrayList를, Hashtable보다는 HashMap을 사용하는 것이 바람직하다.
Collections클래스에는 다음과 같은 동기화 메서드를 제공하고 있으므로, 동기화가 필요할 때 해당하는 것을 사용하면 된다.
static Collection synchronizedCollection (Collection c)
static List synchronizedList (List list)
static Map synchronizedMap (Map m)
static Set synchronizedSet (Set s)
static SortedMap synchronizedSortedMap (SortedMap m)
static SortedSet synchronizedSortedSet (SortedSet s)
※ 주의 : java.util.Collection은 인터페이스이고, java.util.Collections는 클래스이다.
사용하는 방법은 다음과 같다.
1 | List list = Collections.synchronizedList (new ArrayList(...)); | cs |
- 출처 및 참고자료 : JAVA의정석(남궁성 저)
댓글