1. 쓰레드
A. 정의
- 프로세스 내에서 일하는 코드 실행의 흐름(일꾼)
- 싱글쓰레드 vs 멀티쓰레드
- 싱글쓰레드 : 프로세스 내에서 하나의 쓰레드만 실행되는 것. main() 메서드만 실행하는 경우.
- 멀티쓰레드 : 메인 쓰레드에 다른 쓰레드를 더 추가하여 여러개를 실행하는 것
- 장점 : 동시작업 효율로 성능 고도화 및 빠른 응답
- 단점 : 동기화 문제 & 교착상태 일으킬수 있음
B. Thread & Runnable
public class Main {
public static void main(String[] args) {
TestThread thread = new TestThread();
thread.start();
}
}
class TestThread extends Thread {
@Override
public void run() {
for (int i = 0; i <100; i++) {
System.out.print("*");
}
}
}
public class TestRunnable implements Runnable {
@Override
public void run() {
}
}
...
Runnable run = new TestRunnable();
Thread thread = new Thread(run);
thread.start();
- Runnable의 장점 : 클래스인 Thread와 달리, 인터페이스인 Runnable은 다중상속을 받을수 있어 확장성이 좋다.
C. 우선순위 및 상태, 제어
- 우선순위 : thread1.serPriority(n)
- n이 높을수록 우선순위가 높다. 하지만 반드시 먼저 종료되는것은 아니다. 확률이 높을 뿐.
- 상태
- 일시정지된 쓰레드를 다시 실행시키려면, 실행대기상태로 넘어가야만 함.
- 제어
- sleep(n) : 자기 자신만 멈출수 있음. n ms(밀리초)만큼 멈춤. 반드시 예외처리를 해야함.(interrupt를 만나면 다시 실행되기 때문)
- interrupt() : 일시정지 -> 실행대기 상태로 만듦
- join() : 지정 쓰레드가 작업하는 것을 기다림. 시간을 지정하지 않으면 끝날때까지 기다림. 반드시 예외처리 해야함.