SeSAC 25일차(2023-08-25)
스레드
스레드
자바에서 스레드는 프로세스 내에서 실행되는 하위 작업 단위. 스레드를 사용하면 동시에 여러 작업을 수행할 수 있으므로 시스템 성능을 향상시킬 수 있다.
스레드 만드는 방법은 Runnable 인터페이스를 구현하거나 Thread 클래스를 상속하여 스레드를 만든다. 이후 start() 메서드를 호출하여 스레드를 시작한다.
Thread 클래스
- Thread 클래스를 상속받아 새로운 스레드를 만들 수 있으며, run() 메서드를 오버라이딩하여 스레드가 실행할 코드를 작성
- 예시 코드
public class MyThread extends Thread {
public void run() {
// 스레드가 실행할 코드 작성
System.out.println("Hello, World!");
}
}
public class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}
위 코드에서 MyThread 클래스는 Thread 클래스를 상속받아 새로운 스레드를 만든다.
run() 메서드를 오버라이딩하여 스레드가 실행할 코드를 작성.
스레드가 실행되면 run() 메서드가 실행되며, "Hello, World!"가 출력.
- Runnable 인터페이스
- Runnable 인터페이스를 구현하고 run() 메서드를 오버라이딩하여 새로운 스레드를 생성. 생성된 스레드는 Thread 클래스의 생성자에 Runnable 객체를 전달하여 실행할 수 있다.
- 예시 코드
이 코드에서는 MyRunnable 클래스가 Runnable 인터페이스를 구현하고, run() 메서드 안에는 스레드가 실행할 내용을 작성.메인 스레드와 Runnable 스레드는 병행적으로 실행되며, 각각 1초와 0.5초마다 메시지를 출력하고 잠시 일시 정지.결과적으로 이 코드는 메인 스레드와 Runnable 스레드가 번갈아가며 실행되면서 출력 결과가 나타나게 된다.메인 메서드에서는 MyRunnable 인스턴스를 생성하고 이를 Thread 생성자의 인자로 전달하여 새로운 스레드를 생성하고 시작.public class MyRunnable implements Runnable { @Override public void run() { for (int i = 1; i <= 5; i++) { System.out.println("Runnable 스레드: " + i); try { Thread.sleep(1000); // 1초 동안 일시 정지 } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); // Runnable을 이용해 스레드 생성 thread.start(); // 스레드 시작 for (int i = 1; i <= 5; i++) { System.out.println("메인 스레드: " + i); try { Thread.sleep(500); // 0.5초 동안 일시 정지 } catch (InterruptedException e) { e.printStackTrace(); } } } }
스레드 관련 함수
- start() 메서드
- start() 메서드는 새로운 스레드를 시작하는 메서드입니다. start() 메서드를 호출하면 새로운 스레드가 생성되고, run() 메서드가 실행됩니다. start() 메서드는 새로운 스레드를 생성하는 것이므로, 반드시 한 번만 호출해야 합니다.
- join() 메서드
- join() 메서드는 다른 스레드가 종료될 때까지 현재 스레드를 대기시키는 메서드입니다. join() 메서드를 호출한 스레드는 다른 스레드가 종료될 때까지 실행되지 않습니다. join() 메서드는 InterruptedException을 발생시킬 수 있습니다.
- sleep() 메서드
- sleep() 메서드는 현재 스레드를 지정된 시간만큼 멈추는 메서드입니다. sleep() 메서드는 InterruptedException을 발생시킬 수 있습니다.
- interrupt() 메서드
- interrupt() 메서드는 스레드를 인터럽트하는 메서드입니다. 스레드가 블록킹 상태에서 interrupt() 메서드가 호출되면, 스레드는 InterruptedException을 발생시키고 블록킹 상태를 해제합니다.
- isInterrupted() 메서드
- isInterrupted() 메서드는 스레드가 인터럽트되었는지 여부를 확인하는 메서드입니다.
- setPriority() 메서드
- setPriority() 메서드는 스레드의 우선순위를 설정하는 메서드입니다. 우선순위는 1부터 10까지의 값을 가지며, 높은 우선순위를 가진 스레드가 먼저 실행될 가능성이 높습니다.
- yield() 메서드
- yield() 메서드는 현재 실행 중인 스레드를 일시 정지시키고, 다른 스레드에게 실행 기회를 양보하는 메서드입니다. 호출되었을 때, 현재 스레드는 실행 대기 상태로 돌아가고, 다른 스레드가 실행될 수 있습니다. 그러나, 다른 스레드가 없거나 다른 스레드가 대기 중인 상태라면, 현재 스레드가 다시 실행될 수도 있습니다. yield() 메서드는 InterruptedException을 발생시킬 수 있습니다.
- 오늘의 실습 코드
https://github.com/yubin-im/SeSAC/tree/be725ed88d0b101bfc08348cca8df1cfd40baf77/20230821/Thread
728x90
'교육 (Today I Learned) > SeSAC' 카테고리의 다른 글
SeSAC 27일차 / 정렬 알고리즘, 탐색 (0) | 2023.08.25 |
---|---|
SeSAC 26일차 / 정렬 알고리즘 (0) | 2023.08.25 |
SeSAC 24일차 / 상속, 배열, 컬렉션, 스레드 (0) | 2023.08.25 |
SeSAC 23일차 / 조건문, 반복문, toString(), equals() (0) | 2023.08.25 |
SeSAC 22일차 / 알고리즘 (0) | 2023.08.17 |