(프로세스 : 쓰레드 = 공장 : 일꾼)
싱글 쓰레드 프로세스
= 자원 + 쓰레드
멀티 쓰레드 프로세스
= 자원 + 쓰레드 + 쓰레드 +...+ 쓰레드
"하나의 새로운 프로세스를 생성하는 것보다
하나의 새로운 쓰레드를 생성하는 것이 더 적은 비용이 든다."
"대부분의 프로그램의 멀티쓰레드로 작성되어 있다.
그러나, 멀티쓰레드 프로그래밍이 장점만 있는 것은 아니다."
장점
- 시스템 자원을 보다 효율적으로 사용
- 사용자에 대한 응답성이 향상
- 작업이 분리되어 코드가 간결
"여러 모로 좋다"단점
- 동기화에 주의
- 교착상태가 발생하지 않도록 주의
- 각 쓰레드가 효율적으로 고르게 실행될 수 있도록 해야 함
"프로그래밍할 때 고려해야 할 사항들이 많다."
MyThread t1 = new MyThread(); //쓰레드 생성
t1.start() //쓰레드 실행
Runnable r = new MyThread2();
Thread t2 = new Thread(r); //Thread(Runnable r)
//Thread t2 = new Thread(new MyThread2());
t2.start();
void setPriority(int newPrioirity); //쓰레드의 우선순위를 지정한 값으로 변경
int getPrioirity(); //쓰레드의 우선순위를 반환
public static final int MAX_PRIORITY = 10 //최대우선순위
public static final int MIN_PRIORITY = 1 //최소우선순위
public static final int NORM_PRIORITY = 5 //보통우선순위
NEW : 쓰레드가 생성되가 아직 start()가 호출되지 않은 상태
RUNNABLE : 실행 중 또는 실행 가능한 상태
BLOCKED : 동기화블럭에 의해서 일시정지된 상태
WAITING, : 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은 일시정지상태
TILMED_WAITING : 일시정지시간이 지정된 경우
TERMINATED : 쓰레드의 작업이 종료된 상태
static sleep(long millis)
static sleep(long millis, int nanos)
join()
join(long millis)
join(long millis, int nanos)
interrupt()
stop()
suspend()
resume()
static yield()
//static은 쓰레드 자기 자신에게만 호출가능
static void sleep(long millis) //천분의 일초 단위
static void sleep(long millis, int nanos) //천분의 일초 + 나노초
void delay(long millis) {
try {
Thread.sleep(1, 500000); //쓰레드를 0.0015초 동안 멈추게 한다.
} catch(InterruptedException e) {}
}
void interrupt()
//쓰레드의 interrupted상태를 false에서 true로 변경.
boolean isInterrupted()
//쓰레드의 interrupted상태를 반환.
satic boolean interrupted()
//현재 쓰레드의 interrupted상태를 알려주고, false로 초기화
void suspend()
//쓰레드를 일시정지 시킨다.
void resume()
//suspend()에 의해 일시정지된 쓰레드를 실행대기상태로 만든다.
void stop()
//쓰레드를 즉시 종료시킨다.
void join()
//작업이 모두 끝날 때까지
void join(long millis)
//천분의 일초 동안
void join(long millis, int nanos)
//천분의 일초 + 나노초 동안
wait() - 객체의 lick을 풀고 쓰레드를 해당 객체의 waiting pool에 넣는다.
notify() - waiting pool에서 대기중인 쓰레드 중의 하나를 깨운다
notifyAll() - waiting pool에서 대기중인 모든 쓰레드를 깨운다