쓰레드(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 |
댓글