2025/03/16 2

Effective Java Item80. 스레드보다는 실행자, 태스크, 스트림을 애용하라.

작업 큐를 손수 만드는 일은 삼가야 하고, 스레드를 직접 다루는 것도 일반적으로 삼가야 한다. 실행자 프레임워크를 사용하여 작업 단위와 실행 단위로 이용하자.실행 단위ExecutorService(실행서비스)특정 태스크가 완료되기를 기다린다.태스크 모음 중 아무것 하나 혹은 모든 태스크가 완료되기를 기다린다.실행자 서비스가 종료하기를 기다린다.완료된 태스크들의 결과를 차례로 받는다.태스크를 특정 시간에 혹은 주기적으로 실행하게 한다.큐를 둘 이상의 스레드가 처리하게 하고 싶다면 간단히 다른 정적 팩터리를 이용하여 다른 종류의 실행자 서비스(스레드 풀)를 생성하면 된다. 스레드 풀의 스레드 개수는 고정할 수도 있고 필요에 따라 늘어나거나 줄어들게 설정할 수도 있다. ThreadPoolExecutor 스레드 ..

Java/EffectiveJava 2025.03.16

Effective Java Item79. 과도한 동기화는 피하라.

과한 동기화는 성능을 떨어뜨리고, 교착상태에 빠뜨리고, 심지어 예측할 수 없는 동작을 낳기도 한다.응답 불가와 안전 실패를 피하려면 동기화 메서드나 동기화 블록 안에서는 제어를 절대로 클라이언트에 양도하면 안 된다. 동기화된 영역을 포함한 클래스 관점에서는 재정의 함수나, 함수 객체 모두 포함된다.이 경우 메서드 호출을 동기화 블록 바깥으로 옮기면 된다.CopyOnWriteArrayList 사용 : ArrayList를 구현한 클래스로, 내부를 변경하는 자업은 항상 깨끗한 복사본을 만들어 수행하도록 구현했다.내부의 배열은 절대 수정되지 않으니 순회할 때 락이 필요 없어 매우 빠르다.수정할 일은 드믈고 순회만 빈번히 일어나는 관찰자 리스트 용도로 최적이다.열린 호출(OpenCall)private void n..

Java/EffectiveJava 2025.03.16