2010. 8. 6. 16:44
Thread - API JAVA이야기2010. 8. 6. 16:44
이미 상속 관계를 가지고 있는 쓰레드를 자신만의 쓰레드에서 실행시키고자 한다면, 전에 했던것처럼 단순히 Thread클ㄹ스로부터 상속받게 할 수 는 없다.
Thread클래스부터 상속받는 것 대신 Runnable인터페이스를 구현하는 것을 말한다.
Runnable ot = new OurClass();
Thread th = new Thread(ot);
th.start();
객체를 만들고 Thread클래스를 인스턴화시키면서 Runnable레퍼런스를 인자로 넘긴다. 그 후 Thread.start()를 수행하면 된다.
Thread클래스의 run 메소드
public void run(){
if(target != null){
target.run();
}
}
target은 스레드의 생성자로부터 잔달된 runnable인터페이스가 구현된 객체이다. 그러므로 쓰레드는Thread클래스의 run()메소드와 함께 수행되며, 이것은 곧바로 Runnable 인터페이스가 구현된 객체의 run()메소드를 호출하게 된다.
언제 Runnable 인터페이스를 사용하고 언제 Thread클래스를 사용해야 할까나..
inActive() 메소드
이런 방법의 이첨으느 stop메소드에 의한 즉각적이ㄴ제거를 통하지 않고, run()메소드를 이용해서 정상적으로 종료될 수 있게 해준다는 것이다.
isActive()메소드는 Applet클래스의 부분이고 애플릿이 활성화되었는지를 결정한다.
단지 스레딩 시스템을 만들 수 있다는 것만을는 강력한 도구가 될 수 없다. 이러한 쓰레드들이 각 쓰레드들에 의해서 공유된 객체의 메소드를 호출함으로써 손쉽게 서로 간에 통신할 수 있다.
쓰레드의 라이플 사이클
isAlive 메소드
start()메소드 호출하고 가상 머신이 실ㅈ로 쓰레드르 시작시킬 때까지 얼마간으 시간 간격이 있다.
run()메소드로부터 리턴되고 가상 머신이 스레드에 대한 클린업 작업을 수행하기 전까지 또 시간 간격이 있다.
만약 쓰레드의 start()메소드가호출되었느지를 알고 싶거나, 쓰레드가 종료되었는지를 아로자 한다면, isAlive()메소드르 사용해야 함.
단지 스레드가 시작되었다고 해서 실제로 동작하고 있는 것은 아니며, 동작할 수 있다는 것을 의미하지도 않는다. isAlive() 메소드는 스레드의 동작이 멈추었느지를 발견하는데 유용하게 사용된다.
Join 메소드
public void stop(){
t.shoudRun = false;
try{
t.join();
}catch(..){
}
지정된 스레드가 작업 완료될 때까지 기다린다. (t가 완료될때까지 기다린다)
join()메소드가 호출되었을 때, 현재의 스레드는 조인하고 있는 스레드가 더 이상 작동 상태에 있지 않을 때까지 기다린다.
쓰레드 액세스
static Thread currentThread()
현재에 쓰레드에 대한 Thread 객체는 어디에도 저장되지 않을 수 있다.
'JAVA이야기' 카테고리의 다른 글
Java Inner Class (0) | 2010.08.10 |
---|---|
Thread - 동기화 기법 (0) | 2010.08.09 |
JAVA - polymorphism (0) | 2010.07.29 |
10진수를 2진수로 만들어서 요일과 대치하기 (0) | 2010.07.23 |
대여할 책 (0) | 2010.04.24 |