헬린코린이

[JAVA] Thread 본문

Programming/Java

[JAVA] Thread

HCD 2022. 11. 30. 20:44

스레드란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미합니다.

모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다.

또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 합니다.

프로세스(process)란 단순히 실행 중인 프로그램(program)이라고 할 수 있습니다.

 

쉽게 말해 프로세스를 공장이라고 생각하고 스레드를 일꾼이라고 생각하면 된다.

공장 하나에 일꾼은 많이 존재할 수 있다. 그렇게 생각하면 이해하기 쉽다.

 

스레드를 생성하는 방법에는 2가지가 있다.

1. Runnable 인터페이스를 구현하는 방법과

2. Thread 클래스를 상속받는 방법이 있다.

두 방법모두 run()을 오버 라이딩하면 된다.

차이점이라고는 인터페이스는 오버 라이딩을 강제한다는 것뿐이다.

예제를 보겠다.

public class Test01 {
	public static void main(String[] args) {
		Th1 th1 =new Th1();
		
		Th2 th2 =new Th2();
		Thread t3 = new Thread(th2);
		
		th1.start();
		t3.start();
		
		for(int i=0; i<5; i++) {
			System.out.println("메인"+i);
			try {
				Thread.sleep(500);  
			} catch (Exception e) { 
				e.printStackTrace();
			}
		}
	}
}
class Th1 extends Thread{
	@Override
	public void run() {
		for(int i=1; i<=10; i++) {
			System.out.println("클래스로 만든 스레드"+i);
		}
	}
}
class Th2 implements Runnable{
	@Override
	public void run() {
			for(int i=1; i<=10; i++) {
				System.out.println("인터페이스로 만든 스레드"+i);
			}
	}
}

Thread클래스를 상속받으면 인스턴스 화해서 바로 사용할 수 있지만

Runnable을 상속받으면 클래스를 상속받은 것이 아니기에 Thread로 인스턴스 화해 줘야 한다.

 

메서드 run()을 호출하는 것이 아니라

스레드는 start()를 호출해야 실행된다.

 

Comments