본문 바로가기
Java/Java

[Java] 쓰레드(Thread)

by 기록하는_사람 2022. 10. 24.

쓰레드(Thread)

📌 쓰레드(Thread)

:  실행 중인 프로그램 내에서 '또 다른 실행의 흐름을 형성하는 주체'.

 

📌 main 쓰레드 

: main 메소드를 실행하는 쓰레드. 

package thread;

public class ThreadTest {

	public static void main(String[] args) {
		Thread t = Thread.currentThread();
		
		String name = t.getName();
		System.out.println(name);  // main
	}

}

 

쓰레드(Thread) 생성

📌 쓰레드(Thread) 생성 방법 - 1

① Runnable을 구현한 인스턴스 생성.

② Thread 인스턴스 생성.

③ start 메소드 호출. 

 

📌 Runnable

: 추상 메소드 하나만 존재하는 함수형 인터페이스.

void run()

 

📌 Callable

: 값 반환 가능. 

  반환값은 Future<V>형 참조변수에 저장해야 함. 

@FunctionalInterface
public interface Callable<V> {
	V call() throws Exception;
}

 

📌 쓰레드가 모든 일을 마치고 소멸되어야 프로그램이 종료됨. 

 

📌 쓰레드는 모든 일을 마치면 자동으로 소멸됨. 

 

📄 MakeThreadTest.java

package thread;

public class MakeThreadTest {

	public static void main(String[] args) {
		Runnable task = () -> { 
			int n1 = 10;
			int n2 = 20;
			
			String name = Thread.currentThread().getName();
			System.out.println(name);
		};
		
		Thread t = new Thread(task);
		t.start();
		System.out.println("End : " + Thread.currentThread().getName());
	}

}

// End : main
// Thread-0

+ 추가 설명

더보기

- Runnable ...

  → 메소드 구현과 인스턴스 생성 동시에 진행.

      해당 메소드는 새로 생성되는 쓰레드에 의해 실행됨.     

 

- Thread t = new Thread(task);

  → Runnable 전달. 

 

- t.start() 

  → Thread 인스턴스 대상으로 start 메소드 호출해, 쓰레드 생성 및 실행. 

 

📌 쓰레드(Thread) 생성 방법 - 2

① Thread를 상속하는 클래스의 정의와  인스턴스 생성. 

② start 메소드 호출. 

 

📄 MakeThreadTest2.java

package thread;

class Task extends Thread {
	public void run() {
		int n1 = 10;
		int n2 = 20;
		
		String name = Thread.currentThread().getName();
		System.out.println(name + " : " + n1 + " " + n2);
	}
}

public class MakeThreadTest2 {

	public static void main(String[] args) {
		Task t1 = new Task();
		Task t2 = new Task();
		
		t1.start();
		t2.start();
		
		System.out.println("End : " + Thread.currentThread().getName());
	}

}

// End : main
// Thread-0 : 10 20
// Thread-1 : 10 20

'Java > Java' 카테고리의 다른 글

[Java] 쓰레드(Thread) 동기화  (0) 2022.10.24
[Java] I/O 스트림  (0) 2022.10.22
[Java] 예외 처리  (0) 2022.10.22
[Java] 최종 연산  (0) 2022.10.21
[Java] 중간 연산 - 정렬과 루핑(Looping)  (0) 2022.10.21

댓글