나는 그런 목록을 작성하는 경우 :동기화 된 목록을 동기화하는 이유는 무엇입니까?
List<MyObj> myobjs = Collections.synchronizedList(new ArrayList<MyObj>());
관련 문서는이 목록은 요소를 반복하기 위해 동기화 될 필요가 반환 것을 주장하고있다. 그러나 일반 목록을 동기화하고 동기화 된 블록으로 보호 할 수 있습니다. 그래서, 왜 "synchronizedList"가 필요합니까?
지정된 목록으로 백업 된 동기화 된 (스레드로부터 안전한) 목록을 반환합니다. 직렬 액세스를 보장하려면 모든 백킹 목록에 대한 액세스가 반환 된 목록을 통해 수행되는 것이 중요합니다.
그것의 반복 처리를하는 경우, 사용자가 수동으로 돌려 목록에 동기를 잡을 필요가 있습니다 비 결정적 동작이 발생할 수도 있습니다 조언을 따르지
List list = Collections.synchronizedList(new ArrayList());
...
synchronized (list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
실패. 지정된리스트 가 직렬화 가능한 경우, 리턴 된리스트는 직렬화 가능하게됩니다.
매개 변수 : 동기화 목록에 "줄 바꿈"목록을 나열하십시오. 지정된 목록의 동기화 된보기.
synchronizedList
이미 답변을 드렸습니다. http://stackoverflow.com/questions/9468187/collections-synchronizedlist-and-synchronized. 간단한 연산은 스레드 안전성이 보장되지만 반복 연산은 간단한 연산이 아닙니다. –
질문이 비슷하지만 정확한 중복은 아님에 동의합니다. 즉, 동기화가 필요한 경우 SynchronizedList의 용도가 무엇인지 물었고 romsky는 SynchronizedList를 사용할 때 동기화의 목적이 무엇인지 질문했습니다. – paiego
간단한 조작으로 만 동기화 할 수 있기 때문에 ... 어떻게 할 수 있습니까? –