스레드 생성 및 동기화

스레드를 생성하는 방법

  • Thread 클래스를 상속받는 방법
    /* Thread 클래스를 상속 받는 방법과 run() 메서드 재정의 */ 
    import java.lang.Thread;
    class NewThread exends Thread {
       public void run() {
          /* Thread Body */ 
       }
    }
    
    /* Thread 클래스를 상속받았을 경우 스레드를 start 하는 방법 */ 
    NewThread n = new NewThread();
    n.start(); /* 스레드의 시작 */

     

  • Runnable 인터페이스를 구현하는 방법
    Runnable 인터페이스를 사용하는 경우는 클래스가 다른 클래스로부터 이미 상속을 받고 있을 경우에 자바는 중복 상속을 허용하지 않기 때문에 이 경우에 사용할 수 있다.

    /* Runnable 인터페이스의 구현(run() 메서드 구현) */ 
    import java.lang.Runnable;
    class NewRunnableThread implements Runnable {
       public void run() {
          /* Thread Body */ 
       }
    }
    
    /* Runnable 인터페이스를 이용하여 스레드를 생성하고 시작하는 방법 */ 
    Thread t = new Thread(new NewRunnableThread());
    t.start();

스레드 동기화 방법

  • synchronized – 시스템에 동기화를 미루는 방법
    class SyncStack {
     private Vector buffer = new Vector();
     
    /* 메서드에서 사용하는 모든 공유 데이터에 하나의 스레드가 이 메서드를 사용하면 lock을 건다. */ 
     public synchronized char pop() {
      char c;
      c = ((Character)(buffer.remove(buffer.size() - 1))).charValue();
      return c;
     }
     
     public void push(char c) {
      synchronized (this) { /* 현재의 블록 안에 있는 공유 데이터만을 lock을 건다. */ 
       Character charObj = new Character(c);
       buffer.addElement(charObj);
      }
     }
    }
  • wait와 notify – 프로그래머가 직접 동기화를 제어하는 것

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다