일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |
- C
- Rxjava2
- android architecture component
- FLUTTER
- UWP
- 안드로이드 구글맵
- Kotlin
- Java
- kodility
- Django REST
- 프로그래머스
- C++
- livedata
- Flutter TextField
- RxJava
- Android
- NDK
- Android P
- android push
- Django REST framework
- C/C++
- 알고리즘
- dart
- 안드로이드
- Django REST Android
- Python
- RxAndroid
- flutter firestore
- 코틀린
- mfc
- Today
- Total
목록2018/11/13 (2)
개발하는 두더지
[Effective Java 규칙67] 과도한 동기화는 피하라 Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 동기화를 너무 과도하게 적용하면 성능저하, 교착상태 문제가 생길 수 있다. 예를들어 옵저버 패턴에서 0~100인 값을 발행하고 전파한다고 생각해보자.동기화 블록안의 순환문에서 등록된 옵저버에 순차적으로 값을 등록하고 전파한다. 특정 인덱스에서 전파를 받는 콜백 인터페이스 함수에서 만약 옵저버를 삭제한다면 어떻게 될까? 리스트 순회가 이루어지는 상황에서 리스트에서 원소를 삭제하려하기 때문에 ConcurrentModificationException이 발생한다. executor service를 이용하여 다른 스레드에서 구독해제를 시도한다면 어떻게..
[Effective Java 규칙66] 변경 가능 공유 데이터에 대한 접근은 동기화하라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 변경 가능한 데이터를 공유할 떄는 해당 데이터를 읽거나 쓰는 모든 스레드는 동기화를 해야 합니다. 동기화를 하지 않으면 스레드간 변경 사항이 적용될 거라고 보장할 수가 없기 때문입니다. 이런 오류들은 디버깅하기 까다롭고, 간헐적으로 발생하며, 타이밍에 민감합니다. 또한 어떤 VM이냐에 따라서 극도로 다르게 동작하기도 합니다. 메서드나 변수에 synchronized 키워드를 이용해 스레드간 동기화를 시켜서 data의 thread-safe를 시켜줍니다. 현재 data를 사용하고있는 스레드를 제외하고 나머지 스레드들은 da..