자바(안드로이드) arraylist의 synchronized에 대해서
조회수 817회
자바(안드로이드)에서 arraylist 데이터를 여러 쓰레드에서 변경 하고 있는데요
동시에 데이터가 추가(.add)되는 현상이 있더군요
그래서 동기화에 대해서 알아보다가 synchronized에 대해서 알게 됐는데요
synchronized(data) { data.add(""); }
그래서 위와 같이 변경했습니다 근데 만약 데이터를 동시에 추가하는 현상이 발생하면
동기화라는게 다른 쓰레드에서 변경할동안 기다려 주는 건가요?
아니면 아예 접근을 안하고 데이터 추가를 안하는건지 궁금합니다
늦었지만 새해복 많이 받으세요~~^
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
말씀하신대로 synchronized 로 지정된 블럭은 스레드가 블럭 내로 진입할 때 내부적으로 Lock을 걸어 다른 스레드가 접근하지 못하도록 막습니다.
모든 처리가 끝나고 블럭을 빠져나갈 때 Unlock으로 해제를 하기 때문에 한 번에 하나의 스레드만 Access하는 것이 보장됩니다.
멀티스레드 환경에서 공유자원을 접근해야 될 때는 반드시 고려해야 되는 사항으로 기억해두시면 되겠습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력