Process
- 프로그램이 OS로 부터 메모리를 할당받아 적재되면 프로세스
Thread
- 실제 프로그램이 수행되는 작업의 최소 단위로, 하나의 프로세스는 하나 이상의 Thread를 가짐
- 하나의 프로세스 안에서 thread 2개가 동시에 돌아가는것처럼 보임 -> 멀티 쓰레드
- 쓰레드는 cpu를 점유해서 돌아감. 스케줄러가 쓰레드에 cpu를 할당을 해서 쓰레드가 수행되도록함.
Thread 구현
- extends Thread
- implements Runnable(자바에서는 상속 한번만 되기 때문에 이미 상속이 되어있을 때 사용)
Multi-Thread 프로그래밍
- 동시에 여러개의 thread가 수행되는 프로그래밍
- thread는 context라는 각각의 작업공간을 가짐 -> thread가 스위치되면 context도 스위치됨.
- 공유자원이 있을 경우 race condition(서로 공유자원을 가지려함)발생
- critical section(임계영역)에 대한 동기화의 구현 -> 공유자원의 영역(critical section)에 두 개의 thread가 접근시 문제가 발생할 수 있으므로 한번에 하나만 해당영억에 들어가야함.
(critical section에 Lock을 건다던가 해서 해결)
Thread status
1) thread가 start되면 Runnable한 상태가됨 -> cpu 점유 가능
스케줄러가 thread에 cpu배분
thread가 끝이나면 dead상태가 됨.
2) thread는 sleep/wait/join의 메서드를 통해 not Runnable상태로 빠짐 ->cpu점유 불가
* not Runnable-> Runnable이 되려면
sleep -> 시간이 지나면 돌아옴
wait() -> notify()
join() -> 다른 thread에 join을 걸어서 끝나게 되면 돌아옴
만약 not Runnable상태 지속인 경우 InterruptedException으로 예외처리되어 끝남
join() 메서드
- 다른 thread의 결과를 보고 진행해야 할 경우 join()사용
interrupt() 메서드
- thread를 InterruptedException로 빠지게한다
'컴퓨터 공부 > JAVA' 카테고리의 다른 글
2022-09-05 객체 기초 (0) | 2022.09.05 |
---|---|
multi-thread 동기화(synchronization) (0) | 2021.09.13 |
제네릭 프로그래밍 (0) | 2021.08.26 |
String Buffer/ String Builder / 기본자료형에 대한 클래스 (0) | 2021.08.25 |
java.lang / java.util 패키지 (0) | 2021.08.20 |
댓글