Skip to content

benelog/java-concurrency

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5d3e208 · Sep 8, 2020

History

4 Commits
Jul 22, 2014
Jul 22, 2014
Sep 8, 2020
Jul 22, 2014

Repository files navigation

Java concurrency 예제

예제 출처

장별 예제 정리 링크

3. java.lang.Thread 바로 알기

4. 동기화와 가시성

  • Sychronized
    • NonreentrantDeadlock.java : synchronized 키워드에 의한 lock은 재진입가능하다는 것을 보여줌
    • SyncDemo.java : synchronized로 선언된 Block이 동시에 실행되지 못함을 보여줌.
    • PingPong.java : static method의 syncronized 키워드의 동작방식을 보여줌.
  • 가시성 확보
    • StopThread.java(Broken) : static 변수이지만 가시성 확보가 안 되어서 한 스레드에서 write한 값이 다른 thread에서 안 보이는 현상을 보여줌.
    • StopThread.java(Fix1) : 가시성 문제를 synchronized 메소드를 이용해서 동기화 시켜서 해결
    • StopThread.java(Fix2) : 가시성 문제를 volatile 키워드를 이용해서 해결
    • Worker.java : 가시성 확보, 동기화를 모두 했음에도 Thread.join이 호출되면 예상치 못한 동작이 발생함을 보여줌

5. Java concurrent API

  • Executors
    • TimingThreadPool.java : ThreadPoolExecutor를 확장해서 시간측정 로깅 기능을 추가한 예제
  • Callable
    • Preloader.java : Callable, FutureTask , Thread 생성, Future.get의 사용예.
  • java.util.concurrent.locks패키지
  • CountDownLatch
    • TestHarness.java : CountDownLatch를 이용해서 여러 쓰레드로 작업을 실행하고, 최종 종료시간을 구함
    • ConcurrentTimer.java : TestHarness와 유사한 역할이나 스레드 생성 후에 실행되는 구간을 측정하기 위해 단계를 하나 더 두었음.
  • Semaphore
  • 다양한 동기화 방식

6. Thread 안전 클래스

  • Iterator

  • BlockingQueue

  • Atomic class

  • 설계 원칙

    • StackDemo.java : 쓰레드에 한정되어야할 객체를 콜스택 안에서 local변수로 생성하여 메소드 파라미터로 넘김.
    • ThreadLocalDemo.java : ThreadLocal을 이용.

7. Documentation

  • JCIP annotation
    • Memo.java : @Immutable로 선언했을 때 Findbugs를 경고를 보여줌
    • LoginInfo.java : Thread-safe하지 않은 클래스
    • UserService.java : Thread-safe하지 않은 클래스를 멤버변수로 사용하는 코드

8. 성능


참고 자료

  • Effective Java 2nd Edition - Chaptor 10
  • Java concurrency in practice
  • Java로 배우는 디자인 패턴 입문 멀티쓰레드편
  • Thinking in java 4th edition - 17장 컨테이너 깊이 들어야보기, 21장 동시성
  • Agile java - Lesson 13 Multithreading
  • 프로그래밍 면접, 이렇게 준비한다. - Ch8 동시성

About

java concurrency 예제 정리

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages