티스토리 뷰

[JAVA]/JAVA

<Thread> Thread 겉핥기

춘햄 2021. 3. 30. 18:04

Multi Thread를 구현하기 위한 run() 메소드는 Runnable 인터페이스가 가지고 있으며, 이 Runnable 인터페이스를 구현받은 Thread 클래스를 이용하여 구현할 수도 있다.

 

즉, 간단하게 구조를 보면..

run() 메서드: public interface Runnable{
			
		public void run();
	}


Thread 클래스: public class Thread implements Runnable{
	public Thread(){
		}

	@Override
	public void run() {
		}
	}

위와 같이 구성되어 있으므로 Thread 클래스를 상속 받거나, Runnable 인터페이스를 구현 받는 방식으로 run() 메서드를 구현할 수 있다는 것이다. 

 

ThreadClass를 상속 받는 간단한 예시를 보면,

 

○ ThreadClass:

package com.choonham;

public class ThreadClass extends Thread{

	public ThreadClass() {
		// TODO Auto-generated constructor stub
	}
	
	public void run() {
		for(int i = 0; i < 100; i++) {
			System.out.println("인덱스 : " + i);
		}
	}

}

 

○ MainClass:

package com.choonham;

public class MainClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("메인 시작");
		
		ThreadClass tc = new ThreadClass();
		tc.start();   //run()을 구동
		
		System.out.println("메인 종료");
	}

}

위와 같이 구성하여 출력을 확인해보면, 

다음과 같이 "메인 시작"과 "메인 종료" 사이에 코드를 작성하여 구동을 시켰지만, 그 순서를 따르지 않고 run()메서드가 따로 실행되는 걸 확인할 수 있다. 

 

그러나, Thread클래스를 상속 받는 것이 아닌 Runnable 인터페이스를 구현 받았을 경우에는 Runnable 인터페이스가 start() 메서드를 가지고 있지 않기 때문에,  Main에서 한번 더 Thread를 생성해주어 사용해야한다.

예시를 보면,

○ RunnableClass:

package com.choonham;

public class RunnableClass implements Runnable{

	public RunnableClass() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public void run() {
		System.out.println("Runnable");
		
	}

}

○ MainClass:

package com.choonham;

public class MainClass {

	public static void main(String[] args) {
		System.out.println("주 스레드 시작");

		RunnableClass r = new RunnableClass();
		Thread t = new Thread(r);
		t.start();
		System.out.println("주 스레드 종료");
	}

}

매우 중요한 개념이니 알아두도록 하자.

또한, Thread클래스는 private String name 을 변수로 가지고 있으므로, 생성자 부분에 이름을 넣어주면 이름을 붙여서 생성할 수 있다.

 

이 Thread를 사용한 심화 프로젝트나 추후에 포스팅하도록 하겠다.

 

이 Thread 에 대한 자세한 예제 코드와 Timer를 활용한 반복 코드는 다음 블로그에서 상세하게 설명하고 있다.

 

https://raccoonjy.tistory.com/15

 

자바(Java)의 기초 박살내기 - 스레드(Thread)

이번 시간에는 스레드에 대해서 공부하겠습니다. 스레드란 어떠한 프로그램내에서 특히 프로세스 내에서 실행되는 흐름의 단위입니다.  1. Thread - 메모리를 할당받아 실행 중인 프로그램을 프

raccoonjy.tistory.com

 

Comments