2012년 9월 26일 수요일

쓰레드(Thread)

<생성방법>

1. Thead 클래스의 상속


Class ThreadClass extends Thread {
    public void run(){ 
        System.out.println("쓰레드가 실행되었습니다");     
    }
}

Class ThreadTest {

  public static void main(String[] args){
     ThreadClass threadClass = new ThreadClass();
     threadClass.start();
     //start하면 쓰레드에게 cpu가 할당되었을때 run()이 실행된다
  }
}

2. Runnable 인터페이스 구현


Class RunnableClass implements Runnable {
    public void run(){ 
        System.out.println("쓰레드가 실행되었습니다");     
    }
}

Class ThreadTest {

  public static void main(String[] args){
     Runnable runnableClass = new RunnableClass();
     Thread thread = new Thread(runnableClass);
     thread.start();
  }

}

* 상속을 이용한 Thread 클래스는 다른 클래스를 상속할 수 없지만(이미 쓰레드를 상속하고있기 때문에, 인터페이스를 구현한 Runnable 클래스는 다른 클래스를 상속할 수 있다.


<생성자>


1. Thread()
2. Thread(String s)
3. Thread(Runnable r)
4. Thread(Runnable r, String s)

s : 쓰레드 이름
r  : Runnable Interface를 구현한 Class


<메소드>

1. static void sleep(long msec) : 
  msec에 지정된 밀리초 동안 대기

2. static void sleep(long msec, int nsec) : 
    msec에 지정된 밀리초 + nsec에 지정된 나노초 동안 대기

3. String getName() : 
    스레드의 이름을 반환

4. void setName(String s) : 
스레드의 이름을 s로 설정

5. void start() : 
스레드를 시작시킨다. run() 메소드를 호출

6. final int getPriority() : 
스레드의 우선순위를 반환

7. final void setPriority(int p) : 
스레드의 우선순위를 p 값으로 설정

8. boolean isAlive() : 
스레드가 실행 가능 상태, 실행상태, 대기상태에 있으면 true를 그렇지 않으면 false를 반환

9. void join() throws InterruptedException : 
스레드가 끝날 때까지 대기

10. void run() : 
스레드가 실행할 부분을 기술하는 메소드, 하위 클래스에서 오버라이딩 되어야 한다.

11. void suspend() : 
스레드가 일시 정지된다. resume()에 의해 다시 시작될 수 있다.

12. void resume() : 
일시 정지된 스레드를 다시 시작시킨다.


이외에는 JAVA API 의 Thread 클래스 참조.
 - JAVA7 API : http://docs.oracle.com/javase/7/docs/api/ 

<생명 주기>


1. 쓰레드 객체가 생성되면 쓰레드는 메모리에 올라간다.

2. start() 메소드가 호출되면 실행가능 상태가 된다.(cpu 할당대기)

3. cpu가 할당되면 run() 메소드를 실행하며 실행상태가 된다.

4. cpu할당 시간이 종료되거나, yield() 함수가 실행되면 다시 실행가능 상태로 변한다.

5. sleep(), join(), 입출력 등을 요구하게되면 쓰레드는 대기상태로 전환되고, sleep time이 말료되거나, join() 할 쓰레드가 종료, 입출력 종료, notify(), notifyAll() 메소드가 호출되었을시에 실행가능 상태로 전환한다.

6. 해당 쓰레드의 코드가 모두 실행되었을 경우에는 종료된다.




블로그 보관함