자바 Thread

Jiyeong·2022년 2월 17일
0

JAVA

목록 보기
23/31

Process
실행중인 프로그램
OS로부터 메모리를 할당받아 Process가 됨

Thread
하나의 Process는 하나 이상의 Thread를 가짐
실제 작업을 수행하는 단위

Multi-Threading 상황 기초

  1. Thread는 각각 자신만의 작업 공간(Context)을 가짐

  2. 여러 Thread가 자원 하나를 공유 시 자원에 대한 경쟁 발생

  3. 동기화

  • 두 개 이상의 Thread가 동시에 공유 자원 접근 시 오류, 원하지 않는 결과 등 문제 발생 가능
  • 동기화(Synchronized) = 순서를 지켜주는 것
  • Critical Section의 동기화 구현 필요

Runnable interface

자바는 다중 상속이 허용되지 않음 -> 이미 다른 클래스를 상속한 경우 Thread를 만들 때 Runnable interface를 implements해야 함

동기화

Runnable

Thread가 CPU를 점령할 수 있는 상태

스케줄링

스케줄러가 Thread들에게 CPU 배분

Not Runnable

thread가 CPU를 점령할 수 없는 상태

Thread Status(상태)

1.sleep(시간)

2. join()

2개의 Thread가 동시에 작동하는 것으로 한 Thread의 결과를 다른 Thread가 참고할 때 사용
join()을 건 Thread는 Not Runnable에 빠졌다가 다른 Thread 종료 시 Runnable 복귀하여 작동 시작

3. wait()

Object 클래스의 메서드로 어떤 Thread가 필요한 자료를 배분 받을 수 없을 때 대기

Critical section과 Semaphore

  • Critical Section은 두 개 이상의 Thread 동시 접근 불가 영역
  • 하나의 Thread만이 Semaphore를 얻을 수 있고 나머지 Thread는 대기(blocking) 상태
  • 동기화는 임계 영역에서 접근할 경우, 공유 자원을 잠궈서(lock) 다른 Thread의 접근 제어
  • 동기화를 잘못 구현하면 Deadlock에 빠질 수 있음
profile
깃스타가 되고 싶은 벨플루언서

0개의 댓글