자바 병렬 프로그래밍 6

06. 작업 실행

제목: (멀티 코어를 100% 활용하는) 자바 병렬 프로그래밍 / Java Concurrency in Practice저자: 브라이어 게츠, 더그 리, 팀 피얼스, 조셉 보우비어, 데이빗 홈즈, 조슈아 블로쉬출판사: 에이콘 하나의 스레드에 작업을 순차적으로 수행한다면?==> 대부분의 작업은 I/O에 시간이 소요되므로, CPU는 놀게 된다. 작업마다 스레드를 직접 만들어 할당한다면? ==> 스레드 생성/제거도 공짜가 아니다. 자원과 시간을 소모한다.==> 생성할 수 있는 스레드 개수는 무한대가 아니다. 따라서 Executor 프레임웍을 사용하자!! new Thread(runnable).start()와 같은 코드가 보이면 Executor를 사용해서 유연한 실행 정책을 적용할 것을 고려해야 함. ThreadPo..

05. 구성단위

제목: (멀티 코어를 100% 활용하는) 자바 병렬 프로그래밍 / Java Concurrency in Practice저자: 브라이어 게츠, 더그 리, 팀 피얼스, 조셉 보우비어, 데이빗 홈즈, 조슈아 블로쉬출판사: 에이콘 동기화된 클래스의 대표주자: Vector, Hashtable 문제1. 이 역시 동시에 다른 스레드가 item을 추가/삭제할 경우 - ArrayIndexOutOfException이 발생할 수 있음.- 객체 자체에 synchronized 키워드를 사용하면 되지만 성능이 떨어지게 됨. 문제2. Iterator를 이용한 연산도중 동시성 이슈- ConcurrentModificationException 발생: 즉시 멈춤(fail-fast)- 숨겨진 iterator: toString, contain..

04. 객체 구성

제목: (멀티 코어를 100% 활용하는) 자바 병렬 프로그래밍 / Java Concurrency in Practice저자: 브라이어 게츠, 더그 리, 팀 피얼스, 조셉 보우비어, 데이빗 홈즈, 조슈아 블로쉬출판사: 에이콘 스레드 안전한 객체를 만드는 방법. 4.2 인스턴스 한정공유 데이터를 객체 내부에 숨겨두고, 이를 관리하는 부분에 락을 적용한다.ArrayList나 Hashmap은 스레드 안전하지 않지만, Collections.synchronizedList와 같은 API로 생성한 컬렉션은 스레드 안전하다. 이는 래퍼 클래스를 거쳐야만 컬렉션 클래스의 내용을 사용할 수 있기 때문이다. 4.3 스레드 안정성 위임스레드 안전성이 확보된 필드로만 구성된 클래스는 스레드에 안전할 수도 그렇지 않을 수도 있다.여..

03. 객체 공유

제목: (멀티 코어를 100% 활용하는) 자바 병렬 프로그래밍 / Java Concurrency in Practice저자: 브라이어 게츠, 더그 리, 팀 피얼스, 조셉 보우비어, 데이빗 홈즈, 조슈아 블로쉬출판사: 에이콘 3.1.2 단일하지 않은 64비트 연산64비트를 지원하지 않는 JVM에서 64비트를 사용하는 숫자형(double, long 등)을 사용하는 경우 동시에 여러 스레드가 같은 변수값을 읽고 쓴다면 엉뚱한 값을 가져올 수 있음. 32비트 단위로 메모리에서 fetch/store하기 때문. 3.1.4 volatile 변수 volatile 변수: 메모리 가시성(Memory Visiblity, 한 Thread에서 변경한 특정 메모리의 값이, 다른 Thread에서 제대로 읽어지는지가)을 보장하기 위한..

01. 개요 / 02. 스레드 안정성

제목: (멀티 코어를 100% 활용하는) 자바 병렬 프로그래밍 / Java Concurrency in Practice저자: 브라이어 게츠, 더그 리, 팀 피얼스, 조셉 보우비어, 데이빗 홈즈, 조슈아 블로쉬출판사: 에이콘 01. 개요개요 부분은 스레드를 다룰 때 많은 책들에서 언급하는 동시성 문제와 성능 위험에 대해 이야고 있음. 02. 스레드 안정성만약 여러 스레드가 변경할 수 있는 하나의 상태 변수를 적절한 동기화 없이 접근하면 그 프로그램은 잘못된 것이다. 이를 고치는 세가지 방법.해당 상태 변수를 스레드 간에 공유하지 않거나해당 상태 변수를 변경할 수 없도록 만들거나 (불변객체?)해당 상태 변수에 접근할 땐 언제나 동기화를 사용한다. 스레드 안전한 클래스를 설계할 땐, 바람직한 객체 지향 기법이 ..

(멀티 코어를 100% 활용하는) 자바 병렬 프로그래밍 / Java Concurrency in Practice

처음 프로그래밍은 C로 배웠다. 하지만 Java는 내 주 언어다. '프로그램' 모양새를 어느 정도 갖춘 버전을 구현한 언어도 자바이고, 석사 논문 실험할 때의 언어도 자바였다. 지금은 안드로이드로 먹고 살고 있으니 내 생계수단도 자바다. 프로그래밍을 10여년이나 했지만 지금도 멀티 스레드는 두려운 대상이다. 언제 어디서 버그가 튀어 나와 괴롭힐 지 모른다. 더군다나 요즘처럼 코어 개수가 점점 늘어나고 있는 개발환경에서는 더욱 그렇다. 지금이라도 늦지 않았다. 멀티 스레드 개발을 정복해 보자(는 거창한 목표에 도전해 보자). 2008년에 출간된 책이지만 읽을 내용이 풍부하다. 제목: (멀티 코어를 100% 활용하는) 자바 병렬 프로그래밍 / Java Concurrency in Practice저자: 브라이어..