2014-07-15 2 views
1

간단한 질문이 있습니다. 내가 읽기/쓰기 작업에 목록이있는 경우 는 :Collections.synchronizedList가 생성자로 전달되었습니다.

private List<String> _persistedFilesList = Collections.synchronizedList(new ArrayList<String>()); 

을하고 난 코드 블록 어딘가에 사용이

new ArrayList<String>(_persistedFilesList); 

이 블록의 코드는 동기화 해를 필요로 하는가? 새 ArrayList의 생성자에서 java doc에 iterator가 언급되어 있고 목록을 순회하는 모든 작업이 synchList에 동기화되어 있어야합니다. 그러나 나는 확실하지 않다.

감사합니다.

답변

1
does this block code needs syncronization? 

답변은 예입니다 (작성한 새 arraylist에 대한 액세스 권한을 동기화해야하는 경우).

다른 목록의 요소를 사용하여 새 ArrayList를 만들었습니다.

의 JavaDoc은

public ArrayList(Collection<? extends E> c) 

Constructs a list containing the elements of the specified collection, in the order they are returned by the 
collection's iterator. 

그래서, 당신은 통과 컬렉션이 동기화 여부를 한 여부에 관계없이, 그것은 완전히 새로운 목록이 될 것입니다.

+0

새 목록에서 반복되는 경우 동기화 된 링크가 전달 된 링크가 있습니까? 새 목록의 생성 된 순간에 synchronized (_persistedFilesList)를 사용하면 이에 대한 읽기/쓰기 작업이 수행되지 않습니다. – VladLucian

+0

새 ArrayList를 만든 이후의 모든 작업에는 목록을 만드는 데 사용한 Collection과 연결된 링크가 없습니다. 첫 번째 질문에 대한 대답은 아니오입니다. 두 번째 질문을 완전히 이해할 수 없습니다. 더 많은 정보를 제공해 주시겠습니까? – vinayknl

+0

동기화 된 경우 (_persistedFileNames) {... new ArrayList (_persistedFilesList); }, 코드 블록 실행 순간에 _persistedFileNames 목록에 읽기/쓰기 작업이 수행되지 않습니다. – VladLucian

관련 문제