728x90
란?
- 여러 스레드가 동시에 실행되어 효율성과 성능을 높이는 프로그래밍 기법
- Java 는 멀티스레딩을 지원하기 위해 여러 클래스와 인터페이스를 제공함.
1. Thread 클래스와 Runnable 인터페이스
- Thread 클래스 상속 :
Thread
클래스를 상속받아run
메소드를 오버라이드 함. - Runnable 인터페이스 구현 :
Runnable
인터페이스를 구현하고 인스턴스를 Thread 객체에 전달하여 스레드를 생성.
2. Thread 생명주기
- New : Thread 가 생성되었지만 아직 시작되지 않은 상태
- Runnable : 실행 가능한 상태로, 스케줄러가 이 스레드를 선택해 실행시킬 수 있음.
- Blocked : 동기화된 블록에 의해 접근이 제한되어 실행을 기다리는 상태
- Waiting : 다른 스레드의 특정 활동이 완료될 때까지 기다리는 상태
- Timed Waiting : 지정된 시간 동안 기다리는 상태
- Terminated : 작업이 완료되어 스레드가 종료된 상태
3. Synchronization(동기화)
- 여러 스레드가 동시에 같은 객체의 멤버에 접근할 때 데이터 무결성 문제가 발생할 수 있음.
- 이를 방지하기 위해 Java 에서는
synchronized
키워드를 사용해서 메소드나 블록을 동기화할 수 있음. 동기화된 블록이나 메소드는 한 번에 하나의 스레드만이 접근할 수 있어 데이터의 안정성을 보장함.
4. Thread Pool
- Java 의
ExecutorService
인터페이스는 Thread Pool 을 관리하는 여러 메소드를 제공함. Thread Pool 은 작업을 수행할 Thread 의 집합을 미리 만들어 두고, 필요할 때마다 이를 재사용함. Thread 생성과 종료로 인한 오버헤드를 줄여줌
5. 데드락과 레이스 컨디션
- 데드락 : 두 개 이상의 쓰레드가 서로의 자원을 기다리며 무한히 대기하는 상태.
- 레이스 컨디션(Race Condition) : 두 개 이상의 스레드가 데이터를 동시에 수정하려고 할 때 발생하는 문제
6. Java Memory Model (자바 메모리 모델)
- Java 메모리 모델은 Thread 가 변수를 어떻게 읽고 쓰는지 정의함.
volatile
키워드를 사용하면, 변수의 읽기와 쓰기가 메인 메모리에서 직접 이루어지도록 하여, 스레드간의 가시성을 보장함.
늘 그렇지만 잘 쓰면 좋은데, 못쓰면 문제점 많아짐.
728x90
'99클럽 TIL' 카테고리의 다른 글
99클럽 코테 스터디 18일차 TIL OOP (0) | 2024.05.04 |
---|---|
99클럽 코테 스터디 16일차 TIL Java Class 멤버 변수 초기화 순서, 접근 제어자 (0) | 2024.05.03 |
99클럽 코테 스터디 14일차 TIL == 연산자, equals(), hashCode (2) | 2024.05.01 |
99클럽 코테 스터디 13일차 TIL Checked & UnChecked Exception (0) | 2024.04.30 |
99클럽 코테 스터디 12일차 TIL Generic (0) | 2024.04.29 |
Comment