12장. 멀티 스레드 (Multi Thread)
TIP: 자바 서블릿/jsp ==> "웹" ==> 기본 멀티스레드 방식 동작 실행 구조
* 기본 정의
프로그램 ; CPU 실행 가능한 이진코드 집합체(*.class)
프로세스 ; 현재 cpu 실행중인 프로그램
프로세스 구성 ; 데이터 메모리 공간+작업(스레드)
탐색기 ; 파일/폴더 목록 + 목록 출력 스레드 + 파일 오픈 스레드
프로세스 실행방법
스레드 ; 프로세스 구성 작은 작업 단위들
싱글스레드(Single Thread) ; 한번에 한개의 스레드 실행 구조
프로세스 = 데이터 메모리 공간+ 스레드
멀티스레드(Multi Thread) ; 한번에 여러개 스레드 동시 실행 구조
프로세스 = 데이터 메모리 공간+ A스레드 + B스레드.....
* java.lang.Object 클래스
- 메소드 ; wait()/notify()/notifyAll()
- 동기화
- synchronized 키워드
웹 서버 ; 강사 pc 업로드 1개
멀티스레드 실행 -----↓
웹 클라이언트 ; 브라우저 ; 주소; 다운로드
* java.lang.Thread 클래스
- Thread 클래스 상속
class A extends Thread{
public void run(){
overriding 의무적
}
+ 추가 변수 생성 메소드 정의
}
- 멀티스레드 객체 생성
A a1 = new A()
Thread t1 =new A()
- 멀티스레드 동작 메소드 호출
a1.start() ==> run 동작
run 오버라이딩 구현, start 호출
* java.lang.Runnable 인터페이스
- 다중상속
이미 상위클래스 존재하는 상태에서 멀티스레드 동작 클래스
- Runnable 상속
class B extens C implements Runnable {
public void run(){
인터페이스 메소드는 public을 붙인다.
run 반드시 오버라이딩 한다.
}
}
- 멀티 스레드 객체 생성
B b1 = new B(); // Runnable 타입 객체
Thread tb = new Thread(b1);
- 멀티 스레드 동작 메소드 호출
tb.start() ==> run 시작 역할
- Thread/Runnable 상황 선택
다중상속
코딩 번거롭다
- Servlet 클래스 웹 호출, 멀티 스레드
Class C extends javax.servlet.http.HttpServlet{
}
Class D extends Exception{
}
==> 이때는 Runnable을 사용한다.
* sleep 메소드
; 시간동안 스레드 중단된 사이에 대기 스레드중 스레드 스케줄러 선택 스레드실행
* join 메소드 ; 특정 스레드 먼저 실행, 특정 스레드run 메소드 수행 결과
* wait 메소드 ; synchronized(순서)영역 스레드
* synchronized(순서) 동기화 영역 내부에서만 사용