앞서 스레드에 대해 알아봤다.
프로세스는 공장이라면 스레드는 일꾼이라 생각하면 된다.
https://standout.tistory.com/498
https://standout.tistory.com/634
스레드에는 메인스레드와 작업스레드가 있으며
메인스레드는 프로그램이 시작되면 초기화하고 입력을 기다리는 역할을 수행하고,
작업스레드는 메인스레드 외 스레드로 일반적으로 메인스레드에 의해 생성되고 시작된다.
https://standout.tistory.com/284
스레드 구현과 실행 예시코드로 start()와 run()에 대해 이해해보자.
// ThreadExample.java
public class ThreadExample extends Thread { //`Thread` 클래스를 상속
private String threadName;
public ThreadExample(String name) {
this.threadName = name;
}
// `run()` 메서드를 재정의하여 각 쓰레드가 실행될 때 수행할 작업을 정의
public void run() {
System.out.println("Thread " + threadName + " is running.");
try {
// 메시지를 출력한 후 2초 동안 대기한 다음 종료 메시지를 출력
Thread.sleep(2000);
} catch (InterruptedException e) {
System.out.println("Thread " + threadName + " interrupted.");
}
System.out.println("Thread " + threadName + " exiting.");
}
//`main` 함수
public static void main(String[] args) {
//`ThreadExample` 클래스의 두 인스턴스를 생성
ThreadExample thread1 = new ThreadExample("Thread 1");
ThreadExample thread2 = new ThreadExample("Thread 2");
// `start()` 메서드를 호출하여 각각의 쓰레드를 시작
thread1.start();
thread2.start();
}
}
두 개의 쓰레드가 서로 독립적으로 실행되기 때문에
종료 메시지가 어떤 순서로 출력될지 정확히 예측할 수 없다.
종료 메시지는 실행 환경 및 운영 체제에 따라 다를 수 있다.
// Thread Thread 1 is running.
// Thread Thread 2 is running.
// Thread Thread 1 exiting.
// Thread Thread 2 exiting.
'JAVA' 카테고리의 다른 글
보안상의 이유로 도입된 스레드 그룹: 서로 관련된 스레드를 그룹으로! (0) | 2024.02.26 |
---|---|
스레드의 우선순위 setPriority() (0) | 2024.02.19 |
@interface 나만의 애너테이션 만들기 (0) | 2024.02.15 |
Annotation - @Repeatable (0) | 2024.02.15 |
Annotation - @Retention (0) | 2024.02.15 |