java _20120227 (Thread)
프로세스 : 현재 수행되고 있는 프로그램을 말한다.
주기억장치(OS)에 로드되서 실행되는 단위 (워드,엑셀...)
쓰레드 :프로세스 보다 작은 실행 단위를 말한다 (인쇄명령,색상변경,글꼴변경...)
(프로세서 : 수행되고 있는 프로세스 중 "현재" 작업 권한을 갖는 프로그램을 말한다.)
쓰레드 사용 : 1) java.lang.Thread 클래스
(Thread 클래스로부터 직접 상속받아 스레드를 생성)
class PrimeThread extends Thread {// Thread 클래스로부터 상속
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
2) Runnable 인터페이스
(현재의 클래스가 이미 다른 클래스로부터 상속을 받고 있다면 Runnable
인터페이스를 사용하여 스레드를 생성할 수 있다)
(현재의 클래스가 이미 다른 클래스로부터 상속 받고 있는 경우)
(단,Runnable 인터페이스 안엔, run()함수만 있기때문에..
별도의 tread객체 생성 + "rb를 매개변수로 하여 스레드 객체 tb를 생성")
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
쓰레드 사용 : 4개의 생성자를 제공
Thread()
Thread(String s)
Thread(Runnable r)
Thread(Runnable r, String s)
구현
run() :쓰레드 개념으로 수행시켜 주고자하는 코드를 run()안에 추가한다.
(Runnable interface로부터 상속됨)
start():자바가상머신에게 쓰레드 개념으로 구성된 run()를 수행시켜 줄 것을 요청한다.
(thread class로부터 상속됨)
stop(): 중지(완전히)(thread class로부터 상속됨)
wait(): 잠시중지(object class로부터 상속됨)
notify(): 잠시중지 해제(object class로부터 상속됨)
notifyAll(): (object class로부터 상속됨)
과정 start() ->"큐구조" 중간에 낀 명령실행 ->run()
Thread 클래스의 메소드
static void sleep(long msec)
throws InterruptedException ->try,catsh코드 +InterruptedException
void start() ->스레드를 시작시킨다. run() 메소드를 호출
int getPriority() ->스레드의 우선 순위를 반환(0~10) : 모니서터상에서 실행되는 순서X
+기본(5,숫자높을 수록 우선순위)
void suspend() = wait
void resume() = notify
DaemonThread
다른 쓰레드 객체가 종료됨과 동시에 덩달아 종료되는 쓰레드 객체를 말한다.
Class ThreadGroup
예)
tg1 -> t1
t2
tg2 -> t3
-> t4
t는 각각 개별 실행
g에서 대기, 재개 가능
Constructor
ThreadGroup(String name)
ThreadGroup(ThreadGroup parent, String name)
사용예)
ThreadGroup TG1 = new ThreadGroup("TG1")
ThreadGroup TG1 = new ThreadGroup("TG1","TG2")
Thread t1 = new Thread(TG1,"t1")
Thread t2 = new Thread(TG1,"t2")
Thread t3 = new Thread(TG1,"t3")
Thread t4 = new Thread(TG1,"t4")
t1.start(); t2.start(); t3.start(); t4.start(); //개별 실행!
TG1.suspend(); // 그룹에서 컨트롤
TG1.resume();
...
동기화(Synchronization)
대부분의 응용 프로그램에서 다수개의 스레드가 공유
but 공유부분은 상호 배타적으로 사용되어야
한 스레드가 synchronized method를 수행 중이면 다른 스레드는 대기한다
synchronized 를 이용한 동기화
1)특정 객체에 lock을 걸고자 할때
…
synchronized(객체의 참조 변수or "this") {
…
}
2)메소드에 lock 걸고자 할 때
접근지정자 synchronized 결과형 함수명 {
…
}
'새로워지기 > 서른의 생활코딩' 카테고리의 다른 글
ex2) java_thread (0) | 2012.02.27 |
---|---|
ex1) java_thread (0) | 2012.02.27 |
ex29) java_oop (0) | 2012.02.24 |
ex28) java_oop (0) | 2012.02.24 |
ex27) java_oop (0) | 2012.02.24 |
댓글