본문 바로가기
CS

프로세스 스레드

by Ropung 2023. 10. 13.

프로세스? 스레드?

컴퓨터를 하다보면 간간히 프로세스와 스레드를 접하는 경우가 많다.
이러한 것들의 개념을 한번 잡아보자!

프로세스(process)란?

  • 단순히 실행 중인 프로그램(program)이라고 할 수 있다.
  • 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다. 이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다.

스레드(Thread)란?

  • 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.
  • 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다.
  • 또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 한다.

자바에서 스레드의 생성과 실행 방법

자바에서 스레드를 생성하는 방법으론 2가지 방법이 있다.

  • Runnable 인터페이스를 구현하는 방법
class ThreadWithRunnable implements Runnable {

    public void run() {

        for (int i = 0; i < 5; i++) {

            System.out.println(Thread.currentThread().getName()); // 현재 실행 중인 스레드의 이름을 반환함.

            try {

                Thread.sleep(10);

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

    }

}
  • Thread 클래스를 상속받는 방법
class ThreadWithClass extends Thread {

    public void run() {

        for (int i = 0; i < 5; i++) {

            System.out.println(getName()); // 현재 실행 중인 스레드의 이름을 반환함.

            try {

                Thread.sleep(10);          // 0.01초간 스레드를 멈춤.

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

    }
  • 두 방법 모두 작업하고 싶은 내용을 run()매서드에 작성하면 된다.
  • Thread 클래스를 상속받으면 다른 클래스를 상속받을 수 없으므로, 일반적으론 Runnable 인터페이스를 구현하는 방법으로 스레드를 생성한다.

Java 스레드의 우선순위

  • 자바에서 각 스레드는 우선순위(priority)에 관한 자신만의 필드를 가지고 있다.
  • 이러한 우선순위에 따라 특정 스레드가 더 많은 시간 동안 작업을 할 수 있도록 설정할 수 있다.
필드 설명
static int MAX_PRIORITY 스레드가 가질 수 있는 최대 우선순위를 명시함.
static int MIN_PRIORITY 스레드가 가질 수 있는 최소 우선순위를 명시함.
static int NORM_PRIORITY 스레드가 생성될 때 가지는 기본 우선순위를 명시함.
  • getPriority(), setPriority() 매서드를 통해 스레드 우선순위를 반환하거나 변경할 수 있다.

  • 스레드의 우선순위가 가질 수 있는 범위는 1 ~ 10 까지이며, 숫자가 높을수록 우선순위 또한 높아진다.

  • 우선순위는 비례적인 절댓값이 아닌 상대값이다.

  • 우선순위가 10인 스레드가 우선순위 1인 스레드보다 10배 빨라지는 것은 아니다.

  • 단지 우선순위가 10인 스레드는 우선순위가 1인 스레듭다 좀 더 많이 실행 큐에 포함되어, 좀 더 많은 작업 시간을 할당받을 뿐이다.

  • 스레드의 우선순위는 해당 스레드를 생성한 스레드의 우선순위를 상속받게 된다.

참고자료

참고 - 프로세스와 스레드