[Thread 개념 및 사용방법]
이번에는 Java의 Thread 기능의 기본적인 개념과 사용방법에 대해서 알아보도록 하겠습니다.
[프로세스와 스레드 (Process VS Thread)]
일단 스레드의 개념을 알기전에 프로세스와 스레드가 무엇인지부터 알아보겠습니다.
1) 프로세스
프로세스(Process)는 일반적으로 CPU에 의해 메모리에 올려져 실행 중인 프로그램을
자바의 JVM은 주로 하나의 프로세스로 실행되지만 동시에 여러 작업을 수행하기 위해 멀티 스레드도 지원하고 있습니다.
2) 스레드
스레드(Thread)는 위 프로세스 안에서 실질적으로 작업을 실행하는 단위
자바에서는 JVM에 의해 관리되며, 프로세스에는 적어도 1개의 스레드가 존재하며 Main스레드 외
다른 스레드를 추가하면 멀티 스레드 환경이 됩니다. (잘못 사용하면 잠재적인 문제점이 될 수 있습니다..)
[Thead 사용방법]
Thead를 사용하기 앞서서 자바에서는 스레드를 사용하는 2가지 방법이 있습니다.
1. Thead 클래스를 상속받아 사용하는 방법
2. Runnable 인터페이스를 구현하는 방법
Java에서는 다중상속이 불가능하여 Thead 클래스를 상속받으면 다른 클래스를 상속받을 수 없어
보통 Runnable 인터페이스를 구현해 Thead를 문제점을 해결한다고 합니다.
그럼 위에 말한 2개의 방법을 각각 사용해 보도록 하겠습니다.
1) Thead 클래스 사용
일단 Test용 클래스를 생성하고 아래에 Thread 클래스를 만들어준 후 아래와 같이 코드를 작성해 줍니다.
스레드를 사용하기 위해서 스레드클래스에 Thread를 상속해 줍니다.
public class ThreadTest {
public static void main(String[] args) {
myThread1 thread1 = new myThread1(); //Thread객채 생성
thread1.start(); //Thread실행
}
}
//Thread 클래스 생성
class myThread1 extends Thread {
public void run(){
System.out.println("TheadName : "+Thread.currentThread().getName());
//실행되면 Thread명 출력
}
}
위와 같이 작성 후 실행해 보면 아래와 같이 실행된 스레드의 이름이 출력된다.
2) Runnable 인터페이스 방식
Runnable 방식은 Runnable인터페이스를 구현하는 클래스를 정의 후
해당 클래스를 스레드객체로 생성하면 되는 방식이다.
아래 샘플 코드를 작성해서 구현방법을 간단히 알아보겠습니다.
public class RunnableTest {
public static void main(String[] args) {
MyThead myThead = new MyThead(); //Runnable 객채 생성
Thread t1 = new Thread(myThead); //쓰레드 객채 생성
t1.start(); //쓰래드 실행
}
}
class MyThead implements Runnable { //Runnalbe 인터페이스를 구현
@Override
public void run() { //run()메서드 상속Override
System.out.println("MyThead is running : "+Thread.currentThread().getName());
}
}
위와 같이 코드를 작성 후 실행하면 실행되는 스레드 명이 출력됩니다.
간단하게 Thread사용방법에 대해 알아봤습니다.
정말 기본적인 사용개념이며, 해당 개념을 심화해서 적절하게 사용하면 될꺼같습니다.
[Thread 메서드 정리]
아래는 Thread 메서드 정리 및 간단하게 기능을 설명해 두었으니 참고하시면 됩니다.
1. run( ) : 스레드의 실행코드가 작성되는 메소드로 사용자는 run() 메소드를 오버라이드 하여 사용해야 합니다.
2. start( ) : 스레드가 시작되도록 요청하는 메소드로 JVM은 해당 스레드의 run() 메소드를 호출합니다.
3. interrupt( ) : 스레드를 중지 시킵니다.
4. join( ) : 이 스레드가 끝날때까지 기다립니다.
5. join(long millis) : 최대 millis 시간동안 이 스레드가 끝날때까지 기다립니다.
6. sleep(long millis) : millis 시간동안 현재 스레드를 일시중지시킵니다.
7. yield( ) : 현재 스레드의 실행시간을 다른 스레드에게 양보합니다.
8. Thread currentThread( ) : 현재 실행중인 스레드 객체의 참조값을 반환합니다.
9. getId( ) : 스레드의 Id를 반환합니다.
10. getName( ) : 스레드의 이름을 반환합니다.
11. getPriority( ) : 스레드의 우선순위 값을 반환합니다. (우선순위 범위 : 1 ~ 10)
12. Thread.State getState( ) : 스레드의 state 값을 반환합니다.
13. getThreadGroup( ) : 스레드가 속한 스레드 그룹을 반환합니다.
14. interrupted( ) : 현재 스레드의 interrupted 여부를 반환합니다.
15. isInterrupted( ) : 이 스레드의 interrupted 여부를 반환합니다.
16. isAlive( ) : 이 스레드가 살아있는지 여부를 반환합니다.
17. isDaemon( ) : 이 스레드가 데몬 스레드인지 여부를 반환합니다.
18. setDaemon(boolean on) : 이 스레드를 데몬 스레드로 변경합니다.
19. setName(String name) : 이 스레드의 이름을 name으로 변경합니다.
20. setPriority(int newPriority) : 이 스레드의 우선순위를 newPriority로 변경합니다.
21. toString( ) : 이 스레드의 이름, 우선순위, 스레드그룹등의 정보를 담은 문자열을 반환합니다.