
코드를 새로 작성한다면 wait와 notify를 쓸 이유가 없다. 💻 java.util.concurrent 자바 5에서 도입된 고수준의 동시성 유틸리티 덕분에 새로 작성하는 코드에서는 wait와 notify는 거의 쓸 일이 없어졌다. wait와 notify는 올바르게 사용하기가 아주 까다로우니 고수준 동시성 유틸리티를 사용하자. 🤷♂️ 동시성 컬렉션 (concurrent collection) 동시성 컬렉션은 List, Queue, Map 같은 표준 컬렉션 인터페이스에 동시성을 가미해 구현한 고성능 컬렉션이다. 높은 동시성에 도달하기 위해 동기화를 각자의 내부에서 수행하므로, 동시성 컬렉션에서 동시성을 무력화하는 건 불가능하며, 외부에서 락을 추가로 사용하면 오히려 속도라 느려진다. 동시성 컬렉션에서 동..

스레드를 직접 다루는 것은 일반적으로 삼가야 한다. ✨ 실행자 프레임워크 java.util.concurrent 패키지는 실행자 프레임워크라고 하는 인터페이스 기반의 유연한 태스크 실행 기능을 담고 있다. 과거에는 단순한 작업 큐를 만들기 위해서 많은 코드를 작성해야 했지만, 이젠 아래와 같이 간단하게 작업 큐를 생성할 수 있다. // 큐 생성 ExecutorService exec = Executors.newSingleThreadExecutor(); //이 실행자에 실행할 태스크를 넘기는 방법 exec.execute(runnable); //실행자를 종료 exec.shutdown(); 실행자 서비스는 이 외에도 여러 주요 기능들을 가지고 있다. 특정 태스크가 완료되기를 기다린다. 태스크 모음 중 아무것 하나..

교착상태와 데이터 훼손을 피하려면 동기화 영역 안에서 외계인 메서드를 절대 호출하지 말자. 🧶 과도한 동기화는 피하라 과도한 동기화는 성능을 떨어뜨리고, 교착상태에 빠뜨리고, 심지어 예측할 수 없는 동작을 낳기도 한다. 응답 불가와 안전 실패를 피하려면 동기화 메서드나 동기화 블록 안에서는 제어를 절대로 클라이언트에 양도하면 안 된다. 예를 들어 동기화된 영역 안에서는 재정의할 수 있는 메서드를 호출하면 안 되며, 클라이언트가 넘겨준 함수 객체를 호출해서도 안된다. 동기화된 영역을 포함한 클래스 관점에서는 이런 메서드는 모두 바깥세상에서 온 외계인으로 느끼므로, 그 메서드가 무슨 일을 할지 알지 못하며 통제도 할 수 없다. 👻 외계인 메서드 (alien method) 외계인 메서드가 하는 일에 따라 동기..

가변 데이터를 공유하지 말자. 그럼에도 여러 스레드가 가변 데이터를 공유해야 한다면 그 데이터를 읽고 쓰는 동작은 반드시 동기화해야 한다. 📚 동기화 synchronized 키워드는 해당 메서드나 블록을 한 번에 한 스레드씩 수행하도록 보장한다. 한 객체가 일관된 상태를 가지고 생성되고, 이 객체에 접근하는 메서드는 그 객체에 락(lock)을 건다. 락을 건 메서드는 객체의 상태를 확인하고 필요하면 수정한다. 즉, 객체를 하나의 일관된 상태에서 다른 일관된 상태로 변화시킨다. 또한 동기화에는 중요한 기능이 하나 더 있다. 동기화는 일관성이 깨진 상태를 볼 수 없게 하는 것은 물론, 동기화된 메서드나 블록에 들어간 스레드가 같은 락의 보호하에 수행된 모든 이전 수정의 최종 결과를 보게 해 준다. 자바 언어..
- Total
- Today
- Yesterday
- subset
- Container
- dp
- cicd
- Java
- 아이템59
- 순열
- 그래프탐색
- 백준
- 조합
- IMAGE
- DevOps
- BOJ
- 알고리즘
- dfs
- docker
- docker-compose
- 완전탐색
- springboot
- EffectiveJava
- OS
- 운영체제
- bruteforce
- 아이템60
- Retrofit2
- 이펙티브자바
- 완탐
- 토큰기반인증
- 아이템61
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |