Thread 시작, 종료 예제
Java에서 사용하는 Thread는 간단하게 생각해서 하나의 흐름이라고 생각하면 될 것 같다. 하나의
프로세스에는 한 개 이상의 스레드를 사용할 수 있다. 여러 개의 스레드를(멀티 스레드) 사용할 수도 있다. 예를
들면 이클립스에서 잘못된 코딩을 한 경우 자동으로 오류를 지적해 주는데, 이것은 백그라운드에서 스레드가
계속 작동하기 때문이다.
Java는 기본적으로 c/c++과 달리 키워드로 동기화를 지원해 준다. 그래서 비교적 다른
언어와 달리 멀티 스레드를 쉽게 사용할 수 있다.
스레드는 상속을 통하여 구현할 수 있다. 스레드를 상속하면 run()메소드를 반드시 오버라이딩
해야 한다. 이 메소드에 비즈니스
로직이 들어간다.
간단하게 예제를 통하여 스레드의 상속과 시작, 종료에 대해 알아보자.
스레드의 상속
class ExtendThread extends Thread { public void run() { System.out.println("Thread 클래스를 상속"); } } public class ExtendsThreadTest { public static void main(String[] args) { Thread
t = new ExtendThread(); t.start(); } } |
<결과>
Thread 클래스를 상속 |
위 예제는 ExtendThread 클래스가 Thread클래스를 상속받아 run()메소드를 오버라이딩 하여ExtendsThreadTest에서 실행한 코드이다. Start()메소드를
이용하여 스레드를 시작 한다.
class StopThread implements Runnable { private boolean stopped = false; public void run() { while (!stopped) { System.out.println("Thread is alive"); try { Thread.sleep(2000); }
catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("Thread is dead"); } public void stop() { stopped = true; } } public class StopThreadTest { public static void main(String [] args){ System.out.println("####START####"); StopThreadTest
test = new StopThreadTest(); test.process(); } public void process(){ StopThread
st = new StopThread(); Thread
thread = new Thread(st); thread.start(); try{ Thread.sleep(3000); }catch(InterruptedException e){ e.printStackTrace(); } st.stop(); } } |
위 예제는 스레드가 실행되는 중간에 flag를 이용하여 종료하는 방법이다.
Stop()메소드를 실행하면 flage가 true가
되면서 실행되고 있는 while문이 종료되고, 스레드는 종료한다.
class AdvancedStopThread implements Runnable { public void run() { try { while (!Thread.currentThread().isInterrupted())
{ System.out.println("Thread is alive"); Thread.sleep(500); } }
catch (InterruptedException e) { //예상된 예외이므로 무시. 무시하지 않을경우 예외 발생. }
finally { System.out.println("Thread is dead"); } } } public class AdvancedStopThreadTest { public static void main(String[] args) { System.out.println("####START####"); AdvancedStopThreadTest
threadTest = new AdvancedStopThreadTest(); threadTest.process(); } public void process() { AdvancedStopThread
ast = new AdvancedStopThread(); Thread
thread = new Thread(ast); thread.start(); try { Thread.sleep(1000); }
catch (InterruptedException e) { e.printStackTrace(); } thread.interrupt(); } } |
위 예제는 interrupt() 메소드를 이용하여 스레드를 종료시키는
예제이다. Interrupt()메소드는 하던 일을 멈추는 메소드이다.
isInterrupted()메소드를 사용하여 멈추었을 경우 반복문을 나가서 스레드가 종료하게 된다.
'JAVA' 카테고리의 다른 글
도메인주소를 이용하여 IP 알아내기(자바 InetAddress 클래스를 이용) (1) | 2011.03.24 |
---|---|
Thread 사용방법(extends, implements) (1) | 2011.03.17 |
상속 & 오버라이딩 (1) | 2011.02.28 |