Java Section 18 : 스레드
[프로세스와 스레드]
□ 프로세스 : 프로그램의 한 단위. 실행 중인 프로그램으로, 메모리에 독립적으로 저장되어 실행된다.
□ 스레드 : 프로그램 내에서 동작하는 작업 단위를 말하며 스레드를 통해 동시에 여러 가지 작업 가능
- 각각의 프로세스들은 메모리에 독립적으로 등록되어 서로 간섭할 수 없음
- 하나의 프로세스 안에서 다양한 작업을 동시에 하기 위해 스레드가 각자 독립적으로 존재하여 일 수행
- 하나의 프로세스는 적어도 한 개의 스레드를 가진다.
Thread 클래스를 상속하여 run() 메서드 구현
Runnable 인터페이스 구현
① Thread 클래스 상속
- 클래스에 Thread를 상속받은 경우에는 Thread가 가지고 있는 run() 메서드를 사용해서 생성
② Runnable 인터페이스 상속
- 클래스 상속 어려울 시 Runnable 인터페이스 상속하여 구현 (다중 상속 불가능으로 인해)
- Thread 클래스를 사용하는 것이 아니고 Runnable 인터페이스를 구현하는 것
Thread th = new Thread(Runnable을 상속한 인스턴스);
- 스레드 클래스를 선언하면서 runnable을 상속한 클래스를 선언하여 매개변수로 넘겨주는 것
- Thread 클래스는 스레드를 실행하는 주체, Runnable 인터페이스를 상속한 클래스는 실행 코드 지닌 객체
- 메인 클래스에서 스레드 선언 시 생성자 매개변수로 실행할 Runnable 클래스 넘겨주어야 함.
- 스레드는 다중 실행 가능
※ 스레드에 이름 부여하기
현재 진행 중인 스레드가 어떤 작업인지 알기위해 이름 부여
※ 멀티스레드
: 같은 시간에 서로 독립적인 스레드가 일을 처리하는 것 (= 비동기 작업)
[스레드 동기화]
: 여러 개의 스레드가 하나의 공유 데이터에 동시에 접근하게 할 수 었도록 하는 기능
[임계 영역] : 단 하나의 스레드만 처리할 수 있는 영역
[동기화 처리] : 하나의 스레드가 이 영역에 진입할 때 락을 걸어 다른 스레드가 수행되지 못하도록 함
public synchronized void add();
" synchronized " 키워드 사용