'스레드'에 해당되는 글 1건

  1. 2013.02.01 Thread

Thread

개발 및 관리/Java 2013. 2. 1. 14:39 posted by HighLighter
반응형

1. 예제 파일들

 

RunThreads.java

 

RyanAndMonicaJob.java

 

TestSyncTest.java

 

ThreadTester.java

 

 

2. 중요 키워드

 

java.lang.Thread 클래스

 void join();

 void start();

 static void sleep();

 

class Test Sync implements Runnable

 

TestSync job = new TestSync();

Thread a = new Thread(job);

Thread b = new Thread(job);

a.start();

b.start();

 

public synchronized void increment() {

}

 

public void go() {

  doStuff();

  synchronized (this) {

cirticlalStuff();

moreCriticalStuff();

  }

}

 

try {

Thread.sleep(2000); //대기 시간은 밀리초(1/1000) 초 단위

} catch (InterruptedException ex) {

      ex.printStackTrace();

}

 

public class RunThreads implements Runnable {

  public static void main (String[] args) {
 RunThreads runner = new RunThreads();
 Thread alpha = new Thread(runner);
 Thread beta = new Thread(runner);
 alpha.setName("Alpha thread");
 beta.setName("Beta thread");
 alpha.start();
 beta.start();
  }

  public void run() {
    for ( int i = 0; i < 25; i++) {
 String threadName = Thread.currentThread().getName();
 System.out.println(threadName + " is running");
    }
  }
}

 

3. 내용정리

 

1) 어떤 메소드를 한 번에 한 스레드만 접근할 수 있게 하고 싶다면 synchronized라는 키워드를 사용한다.

 

2) 락은 메소드마다 하나씩 있는 것이 아니고 객체마다 하나씩 있다.

 

3) Thread.sleep()이라는 정적 메소드는 적어도 sleep 메소드에 전달된 인자로 지정한 시간 동안 스레드를 실행중인 상태를 떠나있게 만든다. Thread.sleep(2000) 이라호 하면 스레드가 2초 동안 대기 상태로 들어가게 된다.

 

4) sleep() 메소드에서는 확인 예외(InterruptedException)를 던지기 때문에 sleep()을 호출할 때는 반드시 try/catch로 감싸거나 예외 선언을 해야 한다.

 

5) setName() 메소드를 써서 스레드에 이름을 붙일 수도 있다. 모든 스레드에는 기본 이름이 주어지지만 따로 이름을 붙여주면 스레드를 추적하는 것에 도움이 된다. 특히, print나 println 선언문을 사용하면 디버깅 할 때 좋다.

 

6) 스레드를 사용할 때도 객체를 안전하게 만들고 싶다면 어떤 선언문들이 원자적인 절차로 처리되어야 하는지(쪼개지지 않고 한번에 처리되어야 하는지) 결정해야 한다. 즉, 다른 스레드가 같은 객체의 같은 메소드에 들어가기 전에 끝까지 실행되어야만 하는 메소드를 결정해야 한다.

 

7) 스레드 두 개가 메소드 하나에 동시에 들어가는 일을 방지하고 싶다면 메소드 선언부에 synchronized 키워드를 선언해야 한다.

 

8) 어떤 스레드가 그 객체에 있는 동기화된 메소드에 들어가면 다른 어떤 스레드도 같은 객체에 있는 동기화된 메소드에 들어갈 수 없다. 이런 제한이 있어야 데이터를 조작하는 모든 메소드를 동기화함으로써 데이터를 보호할 수 있다.

반응형