1. 프로세스와 스레드의 개념을 이해합니다.
2. 멀티 태스킹을 위해 작업 스레드를 생성하고 실행할 수 있습니다.
3. 동기화 메소드의 역할을 이해하고 활용할 수 있습니다.
4. 스레드의 실행 대기, 일시 정리, 종료 등의 상태를 제어할 수 있습니다.
프로세스 : 운영체제에서 실행중인 하나의 애플리케이션
멀티 프로세스 : 자신의 메모리를 가지고 실행하므로, 서로 독립적
멀티 스레드 : 하나의 프로세스 내부에 생성되므로, 스레드 하나가 예외를 발생시키면 다른 스레드도 영항을 받는다.
Thread thread = new Thraed(Runnable target);
Runnable : 작업 스레드가 실행할 수 있는 코드를 가지고 있는 객체, Runnable은 인터페이스 타입이기 때문 구현 객체를 만들어 대입해야 한다.
class Task implements Runnable{
public void run(){
스레드가 실행할 코드;
}
}
Runnable task = new Task();
Thread thread = new Thread(task);
Thread thread = new Thread(new Runnable() {
public void run(){
스레드가 실행할 코드;
}
}
작업 스레드는 생성되는 즉시 실행되는것이 아니라, start()메소드를 호출해야만 실행된다.
thread.start()
Thread의 하위 클래스로 작업 스레드를 정의하면서, 작업 내용을 포함 시킬 수 도 있다.
Thread클래스를 상속한 후 run()메소드를 재정의(overriding)해서 스레드가 실행할 코드를 작성하면 된다.
public class WorkerThread extends Thread{
@Override
public void run(){
스레드가 실행할 코드;
}
}
Thread thread = new WorkerThread();
코드 절약을 위해, Thread 익명 객체로 작업 스레드 객체 생성 가능
Thread thread = new Thread(){
public void run(){
스레드가 실행할 코드;
}
};
작업 스레드 객체에서 start()메소드를 호출하며 작업 스레드는 자신의 run()메소드를 실행하게 된다.
thread.start();
임계 영역(critical section) : 멀티 스레드 프로그램에서 단 하나의 스레드만 실행할 수 있는 코드 영역
동기화(synchronized) 메소드 : 임계 영역을 지정하기 위해
내부의 동기화 메서드를 실행하면 즉시 객체에 잠금을 걸어 다른 스레드가 동가화 메소드를 실행하지 못하도록 한다.
public synchronized void method(){
임계 영역;
}