자바 쓰레드 : 비교 서평

몇 년 전 O'Reilly 의 Java Threads 와 Addison-Wesley의 Concurrent Programming in Java 의 첫 번째 버전이 나왔기 때문에 스레드 사용 방법을 배우고 싶은 사람들에게 권장 해 왔습니다. 경쟁하는 여러 책과 현재 사용 가능한 원본의 두 번째 버전을 사용하여 권장 사항을 재평가하기로 결정했습니다. 이 기사에서는 최신 Java 스레드 프로그래밍 책 6 권을 살펴 보겠습니다.

검토 된 6 권의 책은 다음과 같습니다.

  1. Java Threads, Second Edition, Scott Oaks 및 Henry Wong (O'Reilly)
  2. Java, Second Edition, Doug Lea의 동시 프로그래밍 (Addison-Wesley)
  3. 자바 스레드 길들이기, Allen Holub (Apress)
  4. 자바 스레드 프로그래밍, Paul Hyde (Sams)
  5. Java 기술을 사용한 다중 스레드 프로그래밍, Bil Lewis 및 Daniel Berg (Prentice Hall, Sun Press)
  6. 고성능 Java 플랫폼 컴퓨팅 : 다중 스레드 및 네트워크 프로그래밍, Thomas Christopher 및 George Thiruvathukal (Prentice Hall, Sun Press)

아래 표는 여섯 권의 책의 주요 특징에 대한 간략한 검토를 제공합니다.

모든 책은 Java 2 플랫폼의 1.2.x 릴리스를 기반으로합니다.
스레드 책 개요
  자바 스레드 동시 프로그래밍 자바 스레드 길들이기 자바 스레드 프로그래밍 다중 스레드 프로그래밍 고성능 자바
가격 2.95 9.95 4.95 4.99 9.99 9.99
총 페이지 320 410 300 510 460 410
웹에서 CD-ROM / 소스 아니오 / 예 아니오 / 예 아니오 / 예 아니오 / 예 아니오 / 예 아니오 / 예
스레드 기초 우수한 공정한 없음 우수한 우수한 공정한
기법 아주 좋아 좋은 아주 좋아 우수한 좋은 아주 좋아
디자인 패턴 없음 우수한 가난한 없음 없음 좋은
척도 : 없음, 나쁨, 보통, 좋음, 매우 좋음, 훌륭함

테이블은 CD-ROM 속성까지 매우 자명해야합니다. 마지막 몇 행에 대해 자세히 설명하겠습니다.

  • 묘화 : 스레드의 기본 속성은 책 스레드가 무엇인지 설명 및 사용 방법에되는 정도를 나타내는 Thread클래스와 Runnable인터페이스의 Object방법 wait(), notify()그리고 notifyAll(), 그리고 synchronized키워드를.
  • Techniques 속성은 책이 스레드를 사용하여 기술을 얼마나 잘 탐구하는지 평가합니다.
  • Design Patterns 속성은 잘 정의 된 디자인 패턴에 따라 스레드 기반 프로그래밍을 만드는 방법에 대한 책의 설명을 측정합니다.

다음으로 각 책을 검토하겠습니다. 각 책의 제목 옆에는 위에 나열된 세 가지 속성의 평균이 아니라 해당 책이 초점을 맞추고 있다고 주장하는 스레드 범위에 따라 별 등급이 표시됩니다. 별 하나는 가난한 직업을 나타냅니다. 가장 높은 등급 (별 5 개)은 탁월한 범위를 나타냅니다.

자바 스레드

Scott Oaks와 Henry Wong이 작성한 Java Threads 의 첫 번째 버전은 스레드 를 사용하여 프로그래밍하는 방법을 배우기위한 원래의 결정적인 리소스였습니다. 대부분의 입문 서적에서는 스레드가 무엇인지 Thread, Runnable인터페이스 와 함께 클래스 를 사용하는 방법에 대해 다루었지만 Java 스레드 는이를 효과적으로 사용하는 데 필요한 추가 정보를 제공했습니다. 두 번째 버전은 Java 2 플랫폼에서 스레드 사용에 대한 업데이트 된 정보, 더 이상 사용되지 않는 API에 대한 정보, I / O 중단 및 Java 2 보안 변경 사항을 포함합니다. 이 책은 또한 Swing 구성 요소 세트의 멀티 스레딩 문제를 다루고 기본 스케줄링 지원 및 멀티 프로세서 머신 작업에 대한 도움말을 제공합니다.

Java 프로그래밍을 처음 접하고 아직 스레드를 정복하지 않은 경우 Java Threads 는 훌륭한 리소스입니다. Java 스레딩의 기초를 살펴보고 다중 스레드 환경에서 프로그램이 제대로 작동하도록하는 데 필요한 기술을 배웁니다.

자바의 동시 프로그래밍

Java Threads 가 Threads API 사용에 대한 낮은 수준의 세부 정보를 설명하는 동안 Doug Lea의 Java Concurrent Programming 은 다중 스레드 프로그램의 적절한 설계를 탐색합니다. 자바 세계에서는 API 사용법을 아는 것만으로는 충분하지 않습니다. 또한 프로그램 설계를 올바르게하기 위해 시간과 에너지를 투자해야합니다. 그런 점에서 동시 프로그래밍 은 주로 디자인 패턴 책입니다. 특정 문제가 주어지면 책에 정의 된 패턴을 찾을 수 있으며 프로그램은 실제로 자체적으로 작성합니다.

동시 프로그래밍 은 서로 다른 사용 패턴을 설명하는 네 가지 영역으로 나뉩니다. "동시 객체 지향 프로그래밍"섹션에서는 기본 사항부터 시작합니다. "제외"섹션에서는 synchronized키워드 사용 패턴을 설명 합니다. 사용하는 "국가 의존"탐구의 문제와 패턴 wait(), notify()그리고 notifyAll()의 방법 Object클래스를. 마지막 섹션 인 "스레드 생성"은 Thread클래스 사용 패턴에 관한 것 입니다.

이 책은 확실히 고급 사용자를 대상으로하며, 약한 사람을위한 것이 아닙니다. 당신은 객체 지향 프로그래밍과 자바 프로그래밍 언어에 대해 잘 알고 있어야하며 동시성 문제를위한 프로그램을 디자인하는 영역에서만 부족합니다. 책 외에도 Lea는 책의 웹 사이트에서 util.concurrent 라이브러리를 무료로 사용할 수 있도록합니다. (링크는 리소스를 참조하십시오.) 라이브러리는 다중 스레드 프로그램을 설계하고 개발하는 데 도움이됩니다.

자바 스레드 길들이기

Allen Holub의 Taming Java ThreadsJavaWorld 에서 9 부로 구성된 Java Toolbox 시리즈로 시작되었습니다. 이 기사는 이후 업데이트되어 이제 Java의 스레딩 API 문제를 설명하는 흥미로운 새 장과 함께 책의 내용을 구성합니다. ( "If I Were King"이라는 제목의 해당 섹션에 대한 링크는 참고 자료를 참조하십시오.) Taming 은 내가 검토 한 처음 두 권의 책과는 다릅니다. API를 올바르게 사용하기위한 기술에 관한 것입니다. 실에 대한 소개 나 디자인 패턴 책이 아닙니다. 코드 라이브러리 (링크에 대한 리소스 참조)도 사용할 수 있으므로 학습 한 내용을 활용할 수 있습니다. 하지만 라이센스 계약을 반드시 읽어보십시오. 공개 도메인이나 오픈 소스가 아닙니다.

Java 멀티 스레딩 모델의 기본 아키텍처를 설명한 후 Holub는 스레드를 안전하게 사용하기위한 기술과 스레드 사용의 위험을 설명합니다. 뮤텍스, 세마포어 및 조건부 변수를 만들고 사용하는 방법을 배웁니다. 스윙 invokeLater()invokeAndWait()방법 의 차이점에 익숙해 질 것입니다 . Holub는 또한 AWTEventMulticaster클래스를 탐색하고 최소한의 오버 헤드로 스레드로부터 안전한 방법과 스레드 풀로 작업 할 수있는 방법을 보여줍니다. 모든 것을 말하고 완료 한 후에는 Java 스레딩 모델의 한계와 사용에 대해 잘 이해하게 될 것입니다.

나는 서문에서이 책의 ​​기술적 오류를보고 놀랐지 만 책이 제공하는 훌륭한 정보를 손상시키지 않았습니다. 그러나 대소 문자가 혼합 된 Java 코드를 계속해서보고 나면 Holub의 코드가 변수와 메서드 이름 사이에 밑줄 문자로 형식화되어 있다는 사실에 조금 놀랐습니다. 코드 블록을 완전히 이해하기 전에 여러 번 읽어야 할 수도 있지만 여기에 제공된 정보의 품질은 불편할 가치가 있습니다. 마지막 참고 : 모든 소스 코드는 완전히 javadoc 주석 처리되어 있습니다.

자바 스레드 프로그래밍

Paul Hyde의 Java Thread ProgrammingJava Threads 와 직접 경쟁합니다 . 그것은 분명히 초보 개발자를 대상으로하며, 개발자가 "성장"할 때를위한 고급 주제 및 기술에 대한 추가 범위를 포함합니다. 이 책은 가장 큰 책이며 공간을 잘 사용합니다.

자바 스레드 프로그래밍의 전반부에서는 스레드가 무엇인지, 기본으로 작업하는 방법에 대해 설명합니다. 스레드 생성 및 Runnable인터페이스 사용에 대한 일반적인 설명을 얻을 수 있습니다. 더 이상 사용되지 않는 방법을 사용하지 않고 스레드를 일시 중단하고 다시 시작하는 방법을 포함하여 스레드를 중지하는 방법에 대한 장이 있습니다. 피복 이외에 wait()notify(), 하이드 상세히 설명 volatileI / O를 통해 파이프 키워드 interthread 통신. Java Thread Programming 은 다른 책에서 볼 수있는 일반적인 스레드 및 Swing 범위 외에도 ThreadLocalInheritableThreadLocal클래스에 대한 최상의 범위를 제공합니다 .

Java 스레드 프로그래밍 의 Part 2에서는 Java 스레드 작업을위한 기술을 설명합니다. 최고의 스레드 풀링 범위와 차단 된 I / O를 벗어나는 데 대한 훌륭한 장을 제공합니다. 이 선택에 실망하지 않을 것입니다.

Java 기술을 사용한 다중 스레드 프로그래밍

나는 항상 다른 책과는 다른 책을 적어도 한 권 찾는 것 같다. Bil Lewis와 Daniel Berg가 쓴 Java Technology를 사용한 Multithreaded Programming 은 그저 그런 짐승이다. 나는 여전히 별점을 주었지만이 책은 특별히 언급 할 가치가있다. 제 생각에는 다중 스레드 프로그래밍 '주요 목적은 Java에서 스레드로 프로그래밍하는 방법을 가르치는 것이 아닙니다. 이 분야에서 도움이 될 것이지만 기본 목적은 Java VM (Java Virtual Machine) 및 기본 운영 체제 내에서 기본 스레드 아키텍처가 작동하는 방식을 가르치는 것 같습니다. 실제로 Java 코드로 된 책의 많은 코드 예제를 얻을뿐만 아니라 Win32 API 스레드 처리를위한 POSIX 코드와 코드도 얻을 수 있습니다. 각 장의 끝에 독자 연습이 있다면 이것은 대학 교과서로 잘 작동 할 것입니다.

즉, 다중 스레드 프로그래밍스레드 사용 방법을 얼마나 잘 가르 니까? Java 스레드 와 가장 유사합니다 . 주요 목표는 스레드가 무엇이며 사용 방법을 가르치는 것입니다. 또한 Java VM에서 모든 것이 작동하는 방식, Java VM 내에서 모든 것이 예약되는 방식 등을 보여줍니다. 또한 동기화, 교착 상태 및 경쟁 조건과 같은 일반적인 스레딩 주제를 다룹니다. Lewis와 Berg는 성능 향상을 위해 RMI 및 최적화 기술과 관련된 스레드 문제도 다룹니다. 대체로 이것은 좋은 책입니다. Java 스레드에 대한 일반적인 프레젠테이션이 아닙니다.

책의 예제가 진행되는 한, Elvis가 UFO에 잡히는 것을 조심하십시오.

고성능 Java 플랫폼 컴퓨팅

가장 긴 제목은 Thomas Christopher와 George Thiruvathukal의 High Performance Java Platform Computing : Multithreaded and Networked Programming 입니다. 저자의 성조차도 경쟁자 길이의 두 배 이상입니다! 초과분은 여기서 멈추지 않습니다. 이 책은 다른 책보다 25 % 이상 비쌉니다.

외부는 충분합니다. 내부는 무엇입니까? 고성능 은 병렬 컴퓨팅에 대한 논의로 바로 이동합니다. von Neumann Machine, Flynn의 분류법, 선형 속도 향상 및 Amdahl의 법칙에 대해 모두 1 장에서 배울 수 있습니다. 2 장에서는 대부분의 API 소개보다 스레드 생성에 대해 자세히 설명합니다. 경쟁 조건의 데모 후 3 장에서는 동기화와 동기화가 필요한 이유에 대해 설명합니다. 4 장에서는 읽기 / 쓰기 잠금 문제에 대한 다양한 변형을 통해 모니터에 대해 자세히 설명합니다. 5 장에서 저자는 스레드 풀을 갖기위한 목적으로 Unix 시스템 유형이 아닌 힙에서 공유 메모리를 사용하는 방법에 대해 설명합니다. 이 책의 나머지 부분에서는 병렬 실행을위한 애플리케이션 개발 패턴을 다룹니다.

여기에는 병렬 컴퓨팅에 대한 좋은 정보가 많이 있지만 High Performance 의 목표는 실제로 범용 스레드 프로그래밍을 가르치는 것이 아닙니다. 주로 병렬 컴퓨팅 과정의 텍스트로 개발 된 것 같습니다. 각 장은 일련의 사려 깊은 연습으로 끝납니다. 답을 찾지 못했습니다.

계속 똑같이 추천하나요?

Concurrent Programming in JavaJava Threads 의 첫 번째 에디션은 1997 년에 출시되었으며 적극 권장되었습니다. 두 번째 버전을 맹목적으로 추천하고 있습니까? 요컨대 Lea의 동시 프로그래밍 은 멀티 스레드 세계를위한 프로그램을 설계하는 방법을 배우는 사람들에게 여전히 훌륭한 리소스 인 것 같습니다 . 읽기 쉽지는 않지만 책에 설명 된 디자인 패턴과 기술은 진지한 Java 개발자에게 훌륭한 도구입니다.

반면 에 Sams의 Java Thread Programming에 의해 Java Threads 가 초보자를위한 최고의 책 으로 성공한 것으로 보입니다 . O'Reilly 오퍼링에 기술적으로 잘못된 것은 없지만 Java 스레드 프로그래밍 은 Java 스레드에 대한 소개로 더 잘 작동합니다. Hyde는 입문 자료를 넘어서 추가로 고급 기술을 제공합니다.

Java ThreadsConcurrent Programming in Java 의 첫 번째 버전 이있는 경우 업데이트 할 가치가 있습니까? Lea의 두 번째 버전을 구하고 Java 스레드를 전달하는 것이 좋습니다 . Java Threads 의 첫 번째 버전이 있다면 지금 쯤 두 번째 버전의 필요성을 넘어 섰을 것입니다. 여전히 소개 텍스트가 필요하면 Sams의 Java Thread Programming을 대신 선택하십시오.

나머지는 어떻게하나요? 정말 힘든 전화이고 누구의 돈을 쓰는지에 따라 다릅니다. 스레드 책을 하나만 더 얻을 수 있다면 Java 기술을 사용한 다중 스레드 프로그래밍을 선택합니다 . 스레드 범위는 독특하고 유용하여 라이브러리에 추가 할 수 있습니다. Holub의 Taming Java Threads 에는 스레드 프로그래밍을 최대한 활용하기위한 몇 가지 멋진 기술이 포함되어 있습니다. 그래도 필요한 리소스인지 확실하지 않습니다. 고성능 Java 플랫폼 컴퓨팅 은 병렬 컴퓨팅 세계에 관심이있는 사람들에게 적합합니다. 그렇지 않으면 선반에 두겠습니다.

John Zukowski는 독립적 인 Java 컨설턴트이며, About 's Focus on Java 가이드뿐만 아니라 About 's Focus on Java 가이드뿐만 아니라 Apress의 Java 2, Second Edition, Sybex의 Mastering Java 2, O'Reilly의 Java AWT Reference의 저자입니다.