자바(안드로이드) arraylist의 synchronized에 대해서

조회수 112회

자바(안드로이드)에서 arraylist 데이터를 여러 쓰레드에서 변경 하고 있는데요

동시에 데이터가 추가(.add)되는 현상이 있더군요

그래서 동기화에 대해서 알아보다가 synchronized에 대해서 알게 됐는데요

synchronized(data) { data.add(""); }

그래서 위와 같이 변경했습니다 근데 만약 데이터를 동시에 추가하는 현상이 발생하면

동기화라는게 다른 쓰레드에서 변경할동안 기다려 주는 건가요?

아니면 아예 접근을 안하고 데이터 추가를 안하는건지 궁금합니다

늦었지만 새해복 많이 받으세요~~^

1 답변

  • 말씀하신대로 synchronized 로 지정된 블럭은 스레드가 블럭 내로 진입할 때 내부적으로 Lock을 걸어 다른 스레드가 접근하지 못하도록 막습니다.

    모든 처리가 끝나고 블럭을 빠져나갈 때 Unlock으로 해제를 하기 때문에 한 번에 하나의 스레드만 Access하는 것이 보장됩니다.

    멀티스레드 환경에서 공유자원을 접근해야 될 때는 반드시 고려해야 되는 사항으로 기억해두시면 되겠습니다.

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.