검색결과 리스트
thread에 해당되는 글 1건
- 2009.05.25 Java Thread
글
□ Thread
- 현재 실행중인 Application 내부에 독립된 하나의 process를 생성하여 Multi Processing을 가능하게 해주는 객체
- class가 Thread 객체를 상속받거나 Runnable Interface를 implements 받아 run 함수를 구현해주면 되는데
Card 객체를 이미 상속받고 있으므로 Runnable Interface를 implements 받으면 된다.
○ Thread의 중요 함수
1. Thread.sleep(int sleepTime)
- Thread에 Delay를 주는 매우 중요한 함수이다.
- sleep Time은 Application의 속도를 단말기의 상이한 성능에도 동일한 속도를 줄 수 있다.
- sleep Time의 중요한 역할은 Application의 속도 조절 외에도 느린 하드웨어에 따른 오류를 방지하는 역할도 수행
2. Thread.yield()
- Thread가 가동이 되면 Thread가 메모리를 장악하게 된다.
- 이 때, 다른 Thread의 메모리 접근을 차단시켜 VM이 제대로 활동할 수 없게 될 수도 있다.
따라서 Thread가 장악하고 있는 메모리를 다른 Thread도 접근이 가능 하도록 메모리를 양보해 주는 것이 좋다.
○ Thread 사용
1. System Thread
- VM에서 기본적으로 2가지 Thread를 운영한다.
- 예외 상황 감시 Thread : 저 전압, 전화, sms등 단말기 시스템의 예외 상황을 감시하는 Thread
- 하드웨어 통신 Thread :
VM에서 하드웨어에게 메시지를 전달하거나 하드웨어가 VM에게 메시지를 전달할 경우 이를 감지하기 위한 목적
- SKVM에서 사용한 이벤트 큐 감시 Thread는 리스너로 대체 되었다.
2. User Thread
- 많은 Thread를 운영하게 되면 시스템에 과중한 부하를 줄 수 있다.
- Main Thread : Application을 운영하기 위해 운영하는 Thread
- 네트워크 관리 Thread :
대부분 단발성 Thread로 운영. 네트워크 통신 동안에는 Blocking이 걸리게 되어 네트워크 관련된 작업은 별도의
Thread로 운영한다.
○ Thread 사용 방법
1. Thread를 사용하기 위해서 Runnale를 implements 하기
public class ThreadCard extends Card implements Runnable {
2. Thread 클래스 선언
Thread t;
3. 생성자에 Thread객체 생성하고 start()해주기
t = new Thread(this); // 어떤 메소드를 Thread 시켜줄지 지정해줘야 함
t.start(); // 여기서는 class내의 run() method, run()은 따로 독립적으로 돌림
4. Thread run() Method 선언
public void run() {
try {
Thread.yield();
} catch( Exception e ) { }
while(true) {
try {
} catch( Exception e ) { }
}
}
□ Timer
- Runnable Interface 상속받은 class
- Runnable Interface의 기능을 강화하여 만든 class
- 별도의 class를 생성하여 사용
- TimerTask 객체 내부의 run 함수를 구현하여 Timer.scheldule 함수를 이용해 수행 시킨다.
- TimerTask의 run 함수는 Timer.schedule() 함수 호출시 자동 호출 되며 그 후에는 이벤트가 발생했을때 호출된다.
- Timer를 종료하고 싶을 때는 Timer.cancel()함수를 사용하면 된다.
- 무한으로 반복하는 것이 아니라 주기적으로 실행할때 사용한다.
- Timer.schedule()를 사용하여 주기적으로 작업을 실행시키고 Timer.cancel()를 사용하여 중지한다.
○ 사용방법
1. TimerTask class를 사용하기 위해 import java.util.*;
2. TimerTask 상속받기 public class T_T extends TimerTask
3. Card객체 생성 TimerCard card;
4. 카드안에 존재하는 멤버를 모두 사용하기 위해서 카드객체 생성
public T_T(TimerCard card) {
this.card = card; // 자기의 주소값을 넘겨줌
}
5. Thread를 사용하기 위한 run() Method 구현
....
card.display.flush();
// paint() mathod가 끝나야지만 Back-Buffer내용을 갱신할 수가 있는데
// 수동으로 설정하는 방법 : flush()를 사용해서 내부의 버퍼의 내용을 화면에 출력 하기도 한다.
□ Thread와 Timer의 차이점
○ Thread는
1. Runnable를 구현
2. run() Mathod를 구현
3. start() Method로 시작
○ TimerTask
1. TimerTask를 상속
2. run() Method를 구현
3. Timer.schedule()로 실행
4. Timer.cancle()로 중지
○ CallSerially
- callSerially 함수는 Display 객체 내에 구현되어 있으며 인수로 Thread 객체를 받는다.
- callSerially() Method 호출시 자동으로 Thread 객체가 생성이 되며 생성자 종료시,
또는 드로잉 이벤트 발생시 run 함수가 자동 호출된다.
- callSerially() 사용할때 주의할점 : 한번만 run() Method를 호출하기 때문에 화면갱신을 완벽하게 만들어야
Thread가 멈추지 않음