[리뷰] 처음 해보는 자바 프로그래밍 - 16. 멀티태스킹의 첫걸음, 스레드 알기

내용 정리

16.1 스레드란?

  • 프로세스 기반 :
    - 여러 프로그램이 병행 실행
    - 생성시 새로운 메모리 할당, 자원 할당
  • 스레드 기반 :
    - 하나의 프로그램에서 여러 작업(스레드)을 병행
    - 프로그램에서 사용중인 메모리와 자원 공유
    - 언제사용? 1) 다수 user의 동시요청 처리 2) 외부 데이터 처리
    - 모든 스레드가 종료되어야 프로그램 종료

16.2 스레드 활용

16.2.1 구현 및 실행

Thread는 run 메서드를 찾아 실행

  • Thread 클래스
    - Runnable을 상속받은 클래스
    - Thread를 extends 후 run() 구현 또는 Thread t = new Thread(() -> {});
    - t.Start()
  • Runnable 인터페이스
    - @FunctionalInterface 어노테이션 지정된 함수형 인터페이스
    - Runnable을 implement 후 run() 구현 또는 람다식 구현 Runnable r = () -> {};
    - new Thread(r).start();
  • 이름(기본은 Thread-번호) 지정 가능
  • 우선순위(10~1, 기본은 5) 지정 가능

16.3 동기화

  • 블록 동기화 : synchronized(객체명) { ... }
  • 메서드 동기화 : synchronized 메서드명() { ... }
public void run() {
    synchronized (account) {
        for(int i = 0; i < 10; i++) {
            account draw(10);
        }
    }
}

public synchronized void draw(long amount) { ... }

16.4 스레드 제어

  • CPU 갯수로 동시 작업 스레드 수 결정
    CPU가 하나인데 멀티로 느껴지는 것은 번갈아가며 실행하기 때문
  • 스레드 상태는 Thread 클래스 enum 내부클래스에 정의 (NEW, RUNNABLE, RUNNING...)
  • wait(), notify(), notifyAll(), sleep(), interrupt()
  • join() : 스레드 간 종속관계 맺을 때 사용

16.5 스레드 풀

스레드를 많이 생성하면 제어가 어려워지므로 pool을 만들어 재사용

profile
개발 공부중!

0개의 댓글