Java에서 ArrayList에 대한 액세스 동기화

앞서 Vector와 ArrayList의 차이점에 대해 이야기할 때 동기화 원리를 설명했습니다. ArrayList는 동기화되지 않으며 동기화 없이 다중 스레드 환경에서 사용해서는 안 됩니다.

동기화하는 방법에는 두 가지가 있습니다.
  1. Collections.synchronizedList()
  2. 의 보호된 버전을 사용하십시오. 어레이 목록:  CopyOnWriteArrayList

1) ArrayList를 Collections.synchronizedList()와 동기화합니다

여기서 주목해야 할 중요한 점은 반복자가 아래 예제와 같이 동기화된 블록 내부에 있어야 한다는 것입니다.

import java.util.ArrayList입니다. 
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class ArrayListSynchronized{

public static void main(String[] args) {

// ArrayList를 만듭니다< 문자열> synchronized
목록< 문자열> slist = Collections.synchronizedList (새로운 ArrayList< 문자열> ());

//ArrayList에 항목 추가
slist.add("1");
slist.add("5");
slist.add("2");
slist.add("7");

System.out.println("동기화된 목록 찾아보기:");
synchronized(slist) {
반복자< 문자열> 반복자 = slist.iterator();
while (iterator.hasNext())
System.out.println(iterator.next());
}
}
}
Runtime:

browse synchronized list:
1
5
2
7

2) CopyOnWriteArrayList