스레드 생성 및 동기화 DarkKaiser, 2007년 6월 22일2023년 9월 6일 스레드를 생성하는 방법 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 – 프로그래머가 직접 동기화를 제어하는 것 Java RunnablesynchronizedThread스레드스레드 동기화스레드 생성