본문 바로가기
컴퓨터 공부/JAVA

자바 Thread

by 구깨비 2021. 9. 13.

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로 빠지게한다

 

 

댓글