본문 바로가기
카테고리 없음

[Network Programming] 자바 스레드와 JVM

by winter_sunshine 2023. 11. 1.

※   멀티태스킹(multi-tasking) 이란?

  • 멀티태스킹(multi-tasking)
    • => 하나의 응용프로그램이 여러 개의 작업(태스크)을 동시에 처리
  • 멀티태스킹 응용프로그램 사례
    • 미디어 플레이어(오디오, 비디오 .. 등),  테트리스 게임(오디오, 블록동작 ... 등)

 

※  테트리스 프로그램을 구성하는 멀티스레드 분석

  • JVM은 3 개의 스레드 중 하나를 선택하여 실행시킨다.
    • 예를 들어 스레드 A를 선택하면 스 레드의 A의 코드(사용자가 작성한 코드)를 호출한다.
    • 스레드 A를 일시 중단하고, JVM이 스 레드 B를 실행시켜려면 다시 스레드 B의 코드(사용자가 작성한 코드)를 호출한다.
    • 마치 바늘이 하나의 실(thread) 을 가지고 바느질하는 것과 자바의 스레드는 일맥 상통함

 

※  스레드와 멀티스레딩

  • 레드
    • 사용자가 작성한 코드로서, JVM에 의해 스케줄링되어 실행되는 단위
  • 자바의 멀티태스킹
    • 멀티스레딩만 가능
      • 스레드는 JVM의 의한 실행 단위, 스케쥴링 단위
  • 멀티스레딩의 효과
    • 한 스레드가 대기하는 동안 다른 스레드 실행
    • 프로그램 전체적으로 시간 지연을 줄임

 

※  웹 서버의 멀티스레딩 사례

 

※  자바 스레드(Thread) 란?

  • 자바 스레드
    • 자바 가상 기계(JVM)에 의해 스케쥴되는 실행 단위의 코드 블럭
    • 스레드의 생명 주기는 JVM에 의해 관리됨
      • JVM은 스레드 단위로 스케쥴링
  • JVM과 멀티스레드의 관계
    • 하나의 JVM은 하나의 자바 응용프로그램만 실행
      • 자바 응용프로그램이 시작될 때 JVM이 함께 실행됨
      • 자바 응용프로그램이 종료하면 JVM도 함께 종료함
    • 하나의 응용프로그램은 하나 이상의 스레드로 구성 가능

 

※  JVM과 자바 응용프로그램, 스레드의 관계

 

  • 두 개의 자바 응용프로그램을 동시에 실행시키고자 하면
  • 두 개의 JVM을 이용하응용프로그램은 서로 소켓 등을 이용하여 통신

 

※  자바 스레드와 JVM

 

  • 각 스레드의 스레드 코드는 응용프로그램 내에 존재함
  • 현재 하나의 JVM에 의해 4 개의 스레드가 실행 중이며 그 중 스레드 2가 JVM에 의해 스케쥴링되어 실행되고 있음

 

※  자바에서 스레드 만들기

  • 스레드 실행을 위해 개발자가 하는 작업
    • 스레드 코드 작성
    • 스레드를 생성하고 스레드 코드를 실행하도록 JVM에게 요청
  • 스레드 만드는 2 가지 방법
    • java.lang.Thread 클래스를 이용하는 경우
    • java.lang.Runnable 인터페이스를 이용하는 경우

 

※  Thread 클래스를 이용한 스레드 생성

  • 스레드 클래스 작성
    • Thread 클래스 상속. 새 클래스 작성
    • class TimerThread extends Thread {}
  • 스레드 코드 작성
    • run() 메소드 오버라이딩
      • run() 메소드스레드 코라고 부름
      • run() 메소드에서 스레드 실행 시작
      • public void run() {   // run() 오버라이딩
  • 스레드 객체 생성
    • TimerThread th = new TimerThread();
  • 스레드 시작
    • start() 메소드 호출
      • 스레드로 작동 시작, JVM에 의해 스케쥴되기 시작함
      • th.start();

 

※  스레드 만들 때 주의 사항

  • run() 메소드가 종료하면 스레드는 종료한다
    • 스레드가 계속 살아있게 하려면 run() 메소드 내 무한루프 작성
  • 한번 종료한 스레드는 다시 시작시킬 수 없다
    • 다시 스레드 객체를 생성하고 start()를 호출해야 함
  • 한 스레드에서 다른 스레드를 강제 종료할 수 있다