Java Thread

Jiyeong·2022년 1월 27일
0

JAVA

목록 보기
9/31

Thread-Runnable을 활용한 Multi-Thread 활용법

Thread는 한 단계씩 수행되어지는 일련의 과정으로 실행중인 프로그램에서 1개의 순차적인 제어 흐름의 추상적인 개념.

자바 프로세스는 중앙처리장치 내 스케쥴러에서 실행 시간을 배분 받아 자바 프로그램 실행.

다중 쓰레드는 하나의 프로그램에서 각각의 독립적인 작업을 수행하는 것으로, 이 경우 동시에 여러가지 작업 가능.

쓰레드의 상태 :

쓰레드 스케줄링

Runnable 상태의 많은 쓰레드가 존재할 때, 이들 쓰레드들 중 실제적으로 실행되는 CPU 타임을 갖는 실행 시간을 배분하는 방식이 스케줄링.
다중 프로세서 시스템에선 여러 개의 쓰레드가 여러 개의 프로세서에 의해 병렬 실행 가능.
플랫폼에 따른 프로세서 배분 방식 :

  • 시분할 프로세서 배분(time-slicing scheduling)
  • 단순 프로세서 배분(non-preemptive scheduling)
  • Thread.yield()

쓰레드의 우선 순위

자바의 모든 쓰레드는 우선 순위를 가짐.
우선 순위 값은 기본적으로 부모 쓰레드에서 상속을 받음. (기본적으로 5)
우선 순위 값 :
Thread.MIN_PRIORITY(=1)~
Thread.MAX_PRIORITY(=10)
Runnble 상태의 쓰레드 중 우선 순위 값이 높은 쓰레드가 실행 시간을 많이 할당 받을 가능성이 높음.
디폴트 우선 순위 값은 Thread.NORM_PRIORITY(=5)

관련 메소드 :
setPriority(int newPriority)
int getPriority()

Thread Interrupt :

동기화(Synchronization)

동기화가 필요한 이유 : 두 개의 쓰레드가 같은 객체를 동시에 사용할 수 있다면 연산을 하는 도중에 다른 쓰레드에 의해 연산 작업이 왜곡될 수 있음.
동기화는 임계 영역 혹은 임계 구간에 접근할 때 공유 자원을 잠금(lock, monitor)으로 써 영역 접근을 통제해 연산 왜곡을 막는 기법.
모든 객체는 1개의 자물쇠를 가지고 있어 이 객체에 접근하는 쓰레드가 특정 영역에 접근 시 잠근 장치를 함으로써 쓰레드 작업을 관리할 수 있음.
동기화 작업을 처리할 때 가장 중요한 것은 동기화 처리에 대한 설계. 잘못된 설계에 의해 deadlock에 빠질 수 있음.

synchronized 메소드 :

wait와 notify :

java.util.concurrent.atomic

: 값을 읽기와 변경을 동시에 수행하여 Multi Thread 환경에서 값이 잘못 변경되는 것을 막기 위한 class들의 package
AtomicBoolean, AtomicInteger, AtomicLong...
AtomicInteger는 getAndSet과 같은 함수 제공
*testandset은 스위칭이 일어나지 않는 함수

ThreadPool

Thread를 매번 생성할 때마다 발생하는 Overhead를 줄이기 위해 사용함.

profile
깃스타가 되고 싶은 벨플루언서

0개의 댓글