Backend/Java
Java - 스레드 (Thread)
퐁고
2023. 2. 23. 19:57
반응형
스레드란? (thread)
스레드는 프로그램에서 실행되는 흐름의 단위, 쓰레드를 사용하면 동시에 여러 가지 작업을 처리할 수 있다.
스레드 생성하기
// Thread 클래스를 상속받아 쓰레드 생성하기
public class MyThread extends Thread {
public void run() {
// 쓰레드가 실행할 코드 작성
}
}
// Runnable 인터페이스를 구현하여 쓰레드 생성하기
public class MyRunnable implements Runnable {
public void run() {
// 쓰레드가 실행할 코드 작성
}
}
// 쓰레드 생성하기
MyThread myThread = new MyThread();
Thread myRunnableThread = new Thread(new MyRunnable());
스레드 실행하기
- 스레드를 생성하고 나면 start() 메소드를 호출하여 실행할 수 있다.
myThread.start();
myRunnableThread.start();
스레드 상태
- 스레드는 실행 중일 때, 대기 중일 때, 일시 정지 상태일 때 등 여러 가지 상태를 가질 수 있다. Java에서는 스레드 상태를 나타내는 Thread.State 열거형을 제공
Thread.State state = myThread.getState();
System.out.println(state); // 출력 예시: RUNNABLE
- 일시정지로 보냄
- sleep(시간) - 주어진 시간이 지나면 자동적으로 실행 대기 상태가 된다.
- join() - 일시정지
- wait() - 동기화 블록 내에서 일시 정지
- 일시 정지에서 벗어남
- interrupt() - InterruptedException을 발생시켜 실행 대기 상태 혹은 종료 상태 만든다.
- notify() - wait() 메소드로 인해 일시 정지 상태인 스레드를 실행 대기로 보낸다.
- notifyAll()
- 실행 대기로 보냄
- yield() - 실행 상태에서 다른 스레드에게 실행을 양보하고 실행 대기 상태가 된다.
스레드 동기화
- 여러 개의 쓰레드가 공유된 자원에 접근할 때, 동기화 문제가 발생, 이 때는 synchronized 키워드를 사용하여 동기화를 할 수 있다.
- 인스턴스와 정적 메소드 어디든 붙일 수 있다.
public synchronized void increment() {
count++; // 공유 변수 count 증가
//
}
스레드 예외 처리
- 스레드에서 예외가 발생하면 쓰레드가 종료, 이 때는 try-catch 문을 사용하여 예외를 처리할 수 있다.
public void run() {
try {
// 쓰레드가 실행할 코드 작성
} catch (Exception e) {
e.printStackTrace();
}
}
위와 같이 예외를 처리하면 스레드가 종료되지 않고 계속 실행됩니다.
결론
Java에서는 스레드를 사용하여 프로그램을 동시에 여러 가지 작업을 처리할 수 있다. 그러나 스레드를 사용할 때는 동기화 문제와 예외 처리에 주의해야 한다.