2014-08-30 2 views
1

그래서 난 내 질문은 다음이다,왜 Threads의 ArrayList를 동기화해야합니까?</p> <p>메신저 만에이를 호출하는 경우

는 내가 동기화 된 키워드를 사용해야 할 것으로 보인다

Java - Filling an ArrayList of Threads with loop

에 따라 스레드의 ArrayList를을 작성해야하지만, main thread 왜 synchronized 키워드를 사용해야합니까? 잠재적으로 동일한 권한을 수행 할 수있는 다른 스레드는 없습니다.

ArrayList<Thread> t = new ArrayList<Thread>(); 
for(int i=0;i<love.size();i++){ 
    BTConnection cbtc = love.get(i).btc; 
    if(cbtc!=null){ 
     Communicate temp = new Communicate(cbtc); 
     Thread ttemp = new Thread(temp); 
     ttemp.start(); 
     t.add(ttemp); 
    } 
} 

내가 사용하는 코드 아래의 권리 또한 경우 :

for(int i=0;i<t.size();i++){ 
    t.get(i).join(); 
} 

합니까 루프 정지에 대한 다음 i 번째 스레드 리턴하여 i 번째 + 1을 기다려야 진행까지?

+0

귀하의 질문은 형식이 잘 지정되어 있습니다. 저것을위한 명성은 당신의 첫번째 질문입니다. 언어 태그가 아마도 가장 중요한 언어 태그 일 수 있으므로 자신이 능숙한 언어 태그를 따르는 사용자는 자신의 질문을 강조 할 수 있습니다. – bolov

+0

두 개 이상의 스레드가 동일한 개체를 동시에 액세스하고 수정할 수 있으면 일종의 동기화가 필요합니다. 당신의 경우, 메인 쓰레드 만이't'에 대해 알고 있고, 생성 된'Communicate' 객체들 중 어느 것으로도 보이지 않습니다. * BTConnection은 주 스레드와 생성 된 스레드 모두에서 액세스 할 수 있기 때문에 동기화가 필요할 수도 있지만 정말 이상한 일을해야합니다. (왜 여러 스레드에서 하나의 연결을 사용해야합니까? ?) 실제로 문제가 될 수 있습니다. –

+0

@MattiasBuelens 글쎄, 루프의 각 반복마다 연결이 계속 변경되어야합니다 ... 내가 잘못 했습니까? – user217354

답변

1

하나의 스레드 만 값을 추가하거나 읽는 경우 스레드 목록을 동기화해야하는 이유는 없습니다. 두 번째 부분은 정확합니다. join -call은 i 번째 스레드가 완료 될 때까지 차단되어 다음 스레드를 기다립니다.