31 Jul 2023 EffectiveJava
실행자 프레임워크(ExecutorService)
이 책의 2판이 나오기 앞서 java.util.concurrent
패키지가 등장했다.
이 패키지는 실행자 프레임워크(Executor Framework)라고 하는 인터페이스 기반의 유연한 태스크 실행 기능을 담고 있다.
실행자 프레임워크는 클라이언트가 요청한 작업을 백그라운드 스레드에 위임해 비동기적으로 처리하는데, 앞서 구현한 초판의 코드보다 모든 면에서 뛰어난 작업...
29 Jul 2023 EffectiveJava
저번 Item에서는 충분하지 못한 동기화의 피해를 다뤘다면, 이번엔 반대의 상황을 다뤄보자.
과도한 동기화
과도한 동기화는 성능을 떨어뜨리고, 교착상태에 빠뜨리고, 예측할 수 없는 동작을 낳기도 한다.
응답 불가와 안전 실패를 피하려면 동기화 메서드나 동기화 블록 안에서는 제어를 절대로 클라이언트에 양도하면 안된다.
재정의할 수 있는 메서드나,...
22 Jul 2023 EffectiveJava
synchronized
키워드는 해당 메서드나 블록을 한번에 한 스레드씩 수행하도록 보장한다.
동기화
많은 프로그래머가 동기화를 배타적 실행,즉 한 스레드가 벼경하는 중이라서 상태가 일관되지 않은 순간의 객체를 다른 스레드가 보지 못하게 막는 용도로만 생각한다.
맞는 설명이지만, 동기화에는 중요한 기능이 하나 더 있다. 동기화 없이는...
22 Jul 2023 EffectiveJava
너무 뻔한 조언 같지만 반복해 각인시켜야 할 정도로 사람들이 자주 어기는 방법이 있다.
API 설계자가 메서드 선언에 예외를 명시하는 까닭은, 그 메서드를 사용할 때 적절한 조치를 취해달라고 말하는 것이다.
예외 무시
안타깝게도 예외를 무시하기란 아주 쉽다. 해당 메서드 호출을 try 문으로 감싼 후 catch...