wait와 notify보다는 동시성 유틸리티를 애용하라 자바 5에서 도입된 고수준의 동시성 유틸리티가 이전의 wait, notify로 하던 일들을 대신하게 되었습니다. wait와 notify는 사용하기 상당히 까다롭기 때문에 고수준의 동시성 유틸리티를 사용하는게 좋습니다. java.util.concurrent 패키지에는 고수준 유틸리티를 세 범주로 나눌 수 있습니다. 실행자 프레임워크, 동시성 컬렉션, 동기화 장치로 구분할 수 있습니다. 💡 동시성 컬렉션 동시성 컬렉션은 List, Queue, Map과 같은 표준 컬렉션 인터페이스에 동시성을 가미해 구현한 고성능 컬렉션입니다. 높은 동시성을 달성하기 위해 동기화를 각자의 내부에서 수행하며, 동시성 컬렉션에서 동시성을 무력화하는건 불가능하며, 외부에서 락을..
과도한 동기화는 피하라 과도한 동기화는 성능을 떨어뜨리고, 교착상태에 빠질 수 있으며 예측할 수 없는 동작을 유발할 수 있습니다. 💡 응답불가와 안전실패를 피하려면 동기화 메서드나 블럭안에서는 제어권을 클라이언트에게 양도하면 안됩니다. 동기화된 영역안에서는 재정의할 수 있는 메서드를 호출해서는 안됩니다. 클라이언트가 넘겨준 함수(람다)를 호출해서는 안됩니다. 💡 예제 코드 @FunctionalInterface public interface SetObserver { void added(ObservableSet set, E element); } public class ForwardingSet implements Set { private final Set s; public ForwardingSet(Set s..
공유중인 가변 데이터는 동기화해 사용하라 싱글 스레드 기반의 프로그램에서는 하나의 스레드가 하나의 객체에 접근할 수 있으므로 동기화에 대한 걱정을 크게 하지 않아도 됩니다. 하지만 멀티 스레드 기반의 프로그램에서는 여러 스레드가 하나의 객체에 접근할 수 있으므로 상당한 주의가 필요합니다. 어떤 하나의 스레드가 객체의 상태를 변경하는 도중 다른 스레드가 접근해 읽는다면 기대한 결과와 다른 결과를 초래할 수 있습니다. 💡 동기화란? 동기화(Synchronized)란 멀티 스레드 환경에서 하나의 메서드나 블럭에 하나의 스레드만 접근하여 작업을 수행하도록 보장하는 것을 의미합니다. 💡 동기화의 특징 한 객체가 일관된 상태를 가지고 생성되었을 때, 이 객체에 접근하는 메서드는 그 객체에 락(lock)을 겁니다. ..
메서드가 던지는 모든 예외를 문서화하라 메서드가 던지는 예외는 그 메서드를 올바로 사용하는데 아주 중요한 정보입니다. 따라서 각 메서드가 던지는 예외는 하나하나 문서화하는데 충분한 시간을 투자해야 합니다. 검사 예외(Checked Exception)은 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 자바독의 @throws 어노테이션을 사용해 정확히 문서화해야 합니다. 💡 공통 상위 클래스 하나로 뭉뚱그려 선언하는 일은 삼가야 합니다. 극단적인 예로 Exception이나 RuntimeException, Throwable을 던진다고 선언해서는 안됩니다. 메서드 사용자에게 각 예외에 대처할 수 있는 힌트를 주지 못할뿐더러, 같은 맥락에서 발생할 여지가 있는 다른 예외들까지 삼켜버릴 수 있습니다. 💡 비검사..
- Total
- Today
- Yesterday
- 서비스 기반 아키텍처
- 트랜잭셔널 아웃박스 패턴 스프링부트
- spring boot redisson 분산락 구현
- 자바 백엔드 개발자 추천 도서
- polling publisher spring boot
- spring boot redis 대기열 구현
- java ThreadLocal
- @ControllerAdvice
- JDK Dynamic Proxy와 CGLIB의 차이
- 공간 기반 아키텍처
- pipeline architecture
- spring boot redisson sorted set
- redis 대기열 구현
- space based architecture
- microkernel architecture
- spring boot excel download paging
- transactional outbox pattern
- spring boot poi excel download
- service based architecture
- spring boot redisson destributed lock
- pipe and filter architecture
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- spring boot 엑셀 다운로드
- redis sorted set으로 대기열 구현
- 람다 표현식
- redis sorted set
- java userThread와 DaemonThread
- transactional outbox pattern spring boot
- spring boot excel download oom
- 레이어드 아키텍처란
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |