스레드를 직접 다루는 것은 일반적으로 삼가야 한다. ✨ 실행자 프레임워크 java.util.concurrent 패키지는 실행자 프레임워크라고 하는 인터페이스 기반의 유연한 태스크 실행 기능을 담고 있다. 과거에는 단순한 작업 큐를 만들기 위해서 많은 코드를 작성해야 했지만, 이젠 아래와 같이 간단하게 작업 큐를 생성할 수 있다. // 큐 생성 ExecutorService exec = Executors.newSingleThreadExecutor(); //이 실행자에 실행할 태스크를 넘기는 방법 exec.execute(runnable); //실행자를 종료 exec.shutdown(); 실행자 서비스는 이 외에도 여러 주요 기능들을 가지고 있다. 특정 태스크가 완료되기를 기다린다. 태스크 모음 중 아무것 하나..
교착상태와 데이터 훼손을 피하려면 동기화 영역 안에서 외계인 메서드를 절대 호출하지 말자. 🧶 과도한 동기화는 피하라 과도한 동기화는 성능을 떨어뜨리고, 교착상태에 빠뜨리고, 심지어 예측할 수 없는 동작을 낳기도 한다. 응답 불가와 안전 실패를 피하려면 동기화 메서드나 동기화 블록 안에서는 제어를 절대로 클라이언트에 양도하면 안 된다. 예를 들어 동기화된 영역 안에서는 재정의할 수 있는 메서드를 호출하면 안 되며, 클라이언트가 넘겨준 함수 객체를 호출해서도 안된다. 동기화된 영역을 포함한 클래스 관점에서는 이런 메서드는 모두 바깥세상에서 온 외계인으로 느끼므로, 그 메서드가 무슨 일을 할지 알지 못하며 통제도 할 수 없다. 👻 외계인 메서드 (alien method) 외계인 메서드가 하는 일에 따라 동기..
가변 데이터를 공유하지 말자. 그럼에도 여러 스레드가 가변 데이터를 공유해야 한다면 그 데이터를 읽고 쓰는 동작은 반드시 동기화해야 한다. 📚 동기화 synchronized 키워드는 해당 메서드나 블록을 한 번에 한 스레드씩 수행하도록 보장한다. 한 객체가 일관된 상태를 가지고 생성되고, 이 객체에 접근하는 메서드는 그 객체에 락(lock)을 건다. 락을 건 메서드는 객체의 상태를 확인하고 필요하면 수정한다. 즉, 객체를 하나의 일관된 상태에서 다른 일관된 상태로 변화시킨다. 또한 동기화에는 중요한 기능이 하나 더 있다. 동기화는 일관성이 깨진 상태를 볼 수 없게 하는 것은 물론, 동기화된 메서드나 블록에 들어간 스레드가 같은 락의 보호하에 수행된 모든 이전 수정의 최종 결과를 보게 해 준다. 자바 언어..
예외를 적절히 처리하면 오류를 완전히 피할 수도 있다. 무시하지 않고 바깥으로 전파되게만 놔둬도 최소한 디버깅 정보를 남긴 채 프로그램이 신속히 중단되게는 할 수 있다. 📢 catch문을 비워두지 말아라 API 설계자가 메서드 선언에 예외를 명시하는 까닭은, 그 메서드를 사용할 때 적절한 조치를 취해달라고 말하는 것이다. 따라서, 예외는 문제 상황에 대처하기 위해 존재하는데 catch 블록을 비워두면 예외가 존재할 이유가 없어진다. 예를 들면, 화재경보가 났는데 이 것을 꺼버려 다른 사람들이 화재경보를 못 듣는 경우와 같다. 물론 FileInputStream을 닫을 때 처럼 예외를 무시해야 할 때도 있지만, 예외를 무시하기로 했다면 catch 블록 안에 그렇게 결정한 이유를 주석으로 남기고 예외 변수의 ..
- Total
- Today
- Yesterday
- BFS
- OS
- IMAGE
- bruteforce
- 운영체제
- 그래프탐색
- docker-compose
- 정처기
- Retrofit2
- dp
- 백준
- 완전탐색
- subset
- EffectiveJava
- Java
- dfs
- springboot
- 이펙티브자바
- 완탐
- 아이템59
- 조합
- 부분집합
- 알고리즘
- 순열
- 아이템61
- docker
- 토큰기반인증
- Container
- 아이템60
- BOJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |