Skip to content

Java Thread & Concurrent Package

kimahhh edited this page Jul 11, 2023 · 1 revision

Java Thread

참조1: https://letsmakemyselfprogrammer.tistory.com/94

참조2: https://letsmakemyselfprogrammer.tistory.com/98

스레드를 생성하고 시작하는 방법

java.lang.Thread 클래스를 통해 스레드 생성 및 제어 가능

  1. Thread 클래스를 extends하고 run 메소드를 오버라이드
  2. Runnable 인터페이스를 implements하고 run 메소드를 구현
  • run 메소드에 스레드가 실행할 코드 작성
  • Thread 객체를 생성하고 start 메소드를 호출하여 스레드 시작

현재 코드는 2번 방법으로 실행


start() / run() / join() / sleep() 같은 메서드는 os에 종속적 → System call을 통해서 os에 해당 기능 요청

os에 요청하는 코드는 jvm에 c++로 작성되어 있음

thread_res_req_flow

버전 별 변경점

  1. Java 1.0: 모든 스레드가 동일한 우선순위를 가짐. Thread 클래스를 상속하거나 Runnable 인터페이스를 구현하여 스레드 생성
  2. Java 1.2: 스레드 그룹(Thread Group) 개념 도입 → 관련 스레드를 한 그룹으로 묶어 관리
  3. Java 5: 동시성(Concurrency) 유틸리티 추가 (java.util.concurrent → 동시성 클래스 제공)
  4. Java 7: Fork/Join 프레임워크 추가 → 병렬처리 효율적 (divide-and-conquer 방식)
  5. Java 8: Stream API → 다중 스레드 쉽게 활용 / 컬렉션 연산 병렬 처리

장점

  • 스레드 간의 동기화 지원
    • 동기화: 여러 스레드가 공유된 리소스를 동시에 액세스하려고 할 때 데이터 무결성을 보장하기 위해 사용
    • synchronized 키워드, wait/notify 메커니즘 제공

주의할 점

  • 스레드가 너무 많음 → 성능 저하
  • 스레드 간의 데이터 공유 → 복잡성 증가, 버그 발생 가능성
  • 스레드 동기화 잘못 사용 → 교착 상태(Dead Lock)

Java Concurrent Package

참조1: https://ddd4117.github.io/2021/05/java-concurrent-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%A0%95%EB%A6%AC/

참조2: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/package-summary.html

java.util.concurrent

  • Executors 및 Thread Pools
    • Executors: 스레드 풀 생성, 스레드 생명 주기 관리, Task 등록과 실행 등을 간편하게 처리
    • 스레드 풀: 한 번에 실행할 수 있는 스레드의 수를 제한하고, 대기 중인 작업을 큐에 넣을 수 있음
  • Conocurrent Collections
    • ConcurrentHashMap, CopyOnWriteArrayList
    • 여러 스레드가 동시에 접근할 수 있는 안전한(thread-safe) 컬렉션 제공
  • Futures and Callable
    • Callable: Runnable과 유사하지만 결과를 반환하고 예외를 던질 수 있는 작업
    • Future: Callable에 의해 수행된 작업의 결과를 나타냄
      • Future.get을 호출하여 작업의 결과를 검색하고, 작업이 완료될 때까지 대기할 수 있음
  • Synchronizers
    • CountDownLatch, CyclicBarrier, Semaphore, Exchanger, Phaser
    • 동기화 도구 제공
    • 스레드가 작업을 동기화하고 서로 통신하는 데 사용
  • Locks
    • 상호 배제를 사용할 수 있는 클래스 제공
    • synchronized 키워드와 wait/notify 메커니즘을 대체하기 위한 동기화 및 잠금 메커니즘 제공
  • Atomic Variables
    • 동기화가 되어 있는 변수 제공
    • 원자 연산을 통해 스레드 간의 race condition을 피하면서 변수를 읽고 쓰는 데 사용

Clone this wiki locally