우선 멀티스레드가 필요한 경우는
다수의 작업을 병렬로 처리하기 위해서이다.
예를 들어...
메인스레드는 프로그램시작을 담당하고
작업스레드1은 네트워킹
작업스레드2는 드로잉을 처리를 해야하는 경우가 그렇다..
Java에서 멀티스레드를 구현하는 방법에 있어 2가지 방법이 존재한다.
1. java.lang.thread 클래스를 직접 객체화 해서 생성한다.
2. Thread를 상속해서 하위클래스를 만들어 생성한다.
우선 첫번째 java.lang.thread클래스를 직접 객체화해서 생성하는 방법을 알아보자.
1. java.lang.thread 클래스를 직접 객체화 해서 생성한다.
java.lang.Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면, 다음과 같이 Runnable을 매개값으로 갖는 생성자를
호출해야한다.
(참고로 인터페이스 naming을 할 때 끝을 ~able이라고 관용적으로 사용한다.)
Thread thread = new Thread(Runnable target); 과 같이..
Runnable은 작업 스레드가 실행될 수 있는 코드를 가지고 있는 개체라고해서 붙여진 이름이다.
Runnable은 인터페이스 타입이기 때문에 구현객체를 만들어 대입해야한다.
Runnable에는 run() 메소드 하나가 정의되어 있는데, 구현클래스에서 run()을 재정의해서 즉 오버라이딩해서
작업스레드가 할 일들을 코드로 작성하면 된다!
우선 Main클래스에서 주 메인스레드가 돌고, Runnable을 상속받은 Task라는 클래스를 아래와 같이 둔다.
package MultiThreadImplement_01;
import javax.print.attribute.standard.PrinterMessageFromOperator;
public class Task implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0 ; i <10; i++)
System.out.println("thread_01 : " + i);
}
}
우리가 만들 작업스레드에게 전달할 일을 담고 있는 Task클래스를 구현해보자.
위에서 설명 했듯이 Runnable이라는 인터페이스를 상속받은 후 run()메서드를 오버라이딩해서
작업스레드에게 작업시킬 코드를 쓴다.
이제 작업시킬 일은 준비됬다.
package MultiThreadImplement_01;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
//방법 01 - 별도의 Runnable 인터페이스를 구현한 클래스를 만드는 방법
//Runnable은 스레드가 실행할 작업내용을 가지고 있을 뿐. 실제 스레드는 아니다.
//Runnable을 스레드 생성시 매개변수로 넘겨주어 thread 생성자를 호출한다.
Runnable task = new Task();
Thread thread_01 = new Thread(task);
//start()메서드를 실행해야 비로소 스레드가 동작한다.
thread_01.start();
//방법 02 - Runnable 인터페이스를 익명 객체를 매개값으로 사용하는 경우.
Thread thread_02 = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0 ; i <10; i++)
System.out.println("thread_02 : " + i);
}
});
//start()메서드를 호출해야 비로소 스레드 동작
thread_02.start();
//Java에서 기본적으로 제공되는 main thread() 테스트
for(int i = 0 ; i <10; i++)
System.out.println("MainThread() : " + i);
}
}
Java에서 기본적으로 제공해주는 MainThread()와 우리가 만든 작업스레드 thread_01(),thread_01()이 찍혀 있음을 확인 할 수 있다.
다음시간에는 두번째 멀티스레드 구현방법인....
작업스레드가 실행할 작업을 Runnable로 만들지 않고 Thread의 하위클래스로 작업스레드를 정의해서 구현하는 방법을 알아본다.
http://limkydev.tistory.com/53 - Thread 하위클래스로 구현하는 방법.
'프로그래밍 > Java' 카테고리의 다른 글
[Java] multiThread name - 스레드 이름 (0) | 2017.07.02 |
---|---|
[Java] multi thread 구현 02 (0) | 2017.07.02 |
[Java] JVM 메모리 구조 (4) | 2017.06.28 |
[Java] enum 이란? (3) | 2017.06.27 |
[Java] 멀티스레드 개념 (2) | 2017.06.27 |
댓글