[리뷰] 처음 해보는 자바 프로그래밍 - 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을 만들어 재사용