ReentrantLock 은 자바5.0 에서 추가됐으며 암묵적인 락으로 할 수 없는 고급 기능을 가지고 있다. 13.1 Lock 과 ReentrantLock - Lock 인터페이스는 조건없는 락, 폴링 락, 타임아웃이 있는 락, 락 확보 대기상태에 인터럽트를 걸 수 있는 기능을 가진다. - 모든 작업이 명시적이다. public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException(); boolean tryLock(); boolean tryLock( long timeout, TimeUnit unit() throws InterruptedException(); void unlock(); Condition newCon..
병렬 프로그래밍의 성능을 분석, 모니터링, 성능 향상 방법에 대한 내용. 성능 튜닝은 프로그램 내부 구조를 복잡하게 할 수 있음. 일단 정상적으로 동작하도록 만든 후, 튜닝 하는 것이 좋다. 11.1 성능에 대해 - 성능을 높인다는 것은 더 적은 자원을 사용하면서 더 많은 일을 하도록 만드는 것이다. - 여러 개의 스레드를 사용하려 한다면 항상 단일 스레드를 사용할 때보다 성능상의 비용을 지불해야만 한다. 스레드간의 작업 내용 조율(락, 신호 보내기, 메모리 동기화)컨텍스트 스위칭스레드를 생성하거나 제거하는 일스레드의 효율적인 스케줄링 11.1.1 성능 대 확장성 애플리케이션 성능을 측정하는 데이터 - 서비스 시간, 대기 시간, 처리량, 효율성, 확장성, 용량 단일 티어 애플리케이션이 다중 티어 애플리케..
10.1 데드락 자바 프로그램에서 데드락이 발생하면 프로그램을 강제로 종료하기 전에는 영원히 멈춘 상태로 유지된다. 10.1.1 락 순서에 의한 데드락 예제 코드는 데드락이 발생할 여지가 있다. public class LeftRightDeadlock { private final Object left = new Object(); private final Object right = new Object(); public void leftRight() { synchronized(left) { synchronized(right) { doSomething(); } } } public void rightLeft() { synchronized(right){ synchronized(left) { doSomething()..
스레드 풀 설정과 튜닝 시 사용할 수 있는 고급 옵션을 살펴보고 흔히 발생할 수 있는 난관을 헤쳐 나갈 수 있는 방법에 대해서 알아본다. 8.1작업과 실행 정책 간의 보이지 않는 연결 관계 ● Executor 프레임워크를 씀으로써 작업 생성과 실행이 분리된다.● 일정한 조건을 갖춘 Executor 프레임워크 실행 정책이 필요한 작업에는 다음과 같은 것들이 있다.- 의존성이 있는 작업 : 활동성 문제가 발생할 수 있음- 스레드 한정 기법을 사용하는 작업 : 단일 스레드로 동작해야 하는 정책이 있어야 함- 응답 시간이 민감한 작업 : 스레드 풀 크기에 따라 응답 시간이 달리질 수 있음- ThreadLocal 을 사용하는 작업 : 스레드 풀 사용 시 값이 재사용될 수 있음 ● 스레드 풀은 동일하고 서로 독립적..
7장 중단 및 종료 작업을 취소하고 인터럽트를 거는 부분에 대한 개념, 작업이나 서비스가 취소 요청에도 잘 반응하도록 프로그램하는 방법에 대해 알아본다. 7.1 작업 중단 7.2 스레드 기반 서비스 중단 7.3 비정상적인 스레드 종료 상황 처리 7.4 JVM 종료 7.1 작업 중단 자바에는 스레드가 작업을 실행하고 있을 때 강제로 멈추도록 하는 방법이 없음 대신 인터럽트(interrupt)를 사용할 수 있음. 인터럽트란, 특정 스레드에게 작업을 멈춰달라고 요청하는 것 (명령이 아닌 요청이다.) 실행 중인 스레드를 강제로 멈추게 하기 보다는 작업을 진행하던 스레드에서 스스로 마무리하는 것이 정상적으로 종료할 수 있어서 가장 적절한 방법임 7.1 작업 중단 실행 중인 작업을 취소하고자 하는 요구사항이 생기는..
6.1 스레드에서 작업 실행 6.1.1 작업을 순차적으로 실행 6.1.2 작업마다 스레드를 직접 생성 6.1.3 스레드를 많이 생성할 때의 문제점 6.2 Executor 프레임웍 6.2.1 예제: Executor를 사용한 웹서버 6.2.2 실행 정책 6.2.3 스레드 풀 6.2.4 Executor 동작 주기 6.2.5 지연 작업, 주기적 작업 6.3 병렬로 처리할 만한 작업 6.3.1 예제: 순차적 페이지 렌더링 6.3.2 결과가 나올 때까지 대기: Callable과 Future 6.3.3 예제: Future를 사용해 페이지 렌더링 6.3.4 다양한 형태의 작업을 병렬로 처리하는 경우의 단점 6.3.5 CompletionService: Executor와 BlockingQueue의 역할 6.3.6 예제: ..