본문 바로가기

3.구현/Java or Kotlin

Java 쓰레드 간단한 코드 예제

아래 내용은 어느책에서 참고했던 건데 정확한 책 명칭이 생각이 안난다. 혹시 아시는 분이 계시면 메일이나 덧글을 달아주세요. ^^

http://ospace.tistory.com/(ospace114@empal.com) 2008.07.24
주의: 가져가실때에는 출처를 명시해주세요.

쓰레드 TIME-WAITING 상태로 들어가기

public class TestClass extends Thread {
   public TestClass() {
      new TestClass().start();
   }

   public void run() {
      while(true) {
         sleep(100); // milliseconds
      }
   }
}

Enumerating Thread

단순히 쓰레드들을 생성하고 생성된 쓰레드에 대한 조회

public void printThread() {
   Thread ths[] = new Thread[Thread.activeCount()];
   int n = Thread.enumerate(ths);
   for (int i = 0; i<n; i++) {
      System.out.println("Thread " + i + " is " + ths[i].getName());
   }
}

여러 쓰레드 객체 Join

pubic class JoinApplet extends Applet {
   Thread t[] = new Thread[30];
   public void start() {
      for (int i = 0; i<30; i++) {
         t[i] = new CalcThread(i);
         t[i].start();
      }
   }

   public void stop() {
      for(int i=0; i<30; i++) {
         try {
            t[i].join();
         } catch (InterruptedException e) { }
      }
   }
}

동기화 메소드

public synchrnoized boolean deduct(float t) {
   //...
}

뮤텍스(mutex lock): 상호배제 락(mutually exolusive lock)

한번 정지된 쓰레드는 다시 시작할 수 없다. 다시 생성해서 시작해야된다.

현재 쓰레드 객체 얻기 메소드

static Thread cuurentThread()  

ex)

Thread.currentThread().getName()

서로다른 두 메소드를 동기화하는 법 -> 락은 메소드가 아닌 객체형태로 존재

//BusyFlag클래스
public class BysyFlag {
   protected Thread busyFlag = null;
   public void BusyFlag(Thread thread) { ... }
   public void getBusyFlag() {
      while(busyFlag != Thread.currentThread()) {
         if(busyFlag == null)
            busyFlag = Thread.currentThread();
         try {
            Thread.sleep(100);
         } catch(Exception e) {}
      }
   }

   public void freeBushFlag() {
      if(busyFlat == Thread.currentThread())
         busyFlag = null;
   }
}

이게 점제적 버그가 있다고 하내요. 아무튼 참고정도 하세요.

반응형