본문 바로가기
Java/Spring

자바 쓰레드(Thread)

by 인포썸 2020. 5. 20.

 

쓰레드(Thread)란?

쓰레드란 어떠한 프로그램내에서 특히 프로세스에서 실행되는 흐름의 단위입니다.

모든 프로세스는 한 개 이상의 쓰레드를 갖고 있습니다.

만약 한 개 이사의 쓰레드를 갖고 있는 프로세스를 멀티쓰레드 프로세스라고 합니다.

 

프로세스란?
  • 보통 우리가 프로그래밍 언어(Java,C언어 등)으로 소스를 짜서 만든 것을 "프로그램" 이라고 합니다. 그리고 이 프로그램을 "실행"시켜서 동작하게 만들어 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 "프로세스"라고 합니다. 

Java 쓰레드는?

  • 프로세스는 보통 하나의 프로그램 처리 경로를 가지고 있는데, 이 경로는 직렬적(하나의 방향을 가짐)이어서, 어떤 일을 수행할 때 프로그래머가 원하는 순서대로 일을 처리하는데, 만약 앞 뒤가 필요 없는 일들이 있을 때 분리해서 동시에 처리하고 싶으면 자바 쓰레드(Thread)를 사용할 수 있습니다.
  • 자바 쓰레드를 사용하면 하나의 프로세스를 병렬적으로 처리 여러 개의 처리 루틴을 가질 수 있습니다.
결론은 프로세스는 운영체제로부터 작업을 할당받는 작업의 단위이고, 스레드는 프로세스가 할당 받은 자원을 이용하는 실행의 단위이다.

쓰레드의 생성 방법

  • Runnable 인터페이스 구현 (Runnable 인터페이스는 run()메소드 하나 만을 가지는 인터페이스입니다.)
  • Thread 클래스 상속  

쓰레드를 통해 작업하고 싶은 내용을 run()메소드를 오버라이드해서 작성합니다.

 

--쓰레드 실행 코드--

//Thread 클래스 상속 방식

class ThreadJava extends Thread {

    @Override

//실제 Thread가 수행할 작업

    public void run() {

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

            System.out.println(getName());//쓰레드 이름

 

            try {

                Thread.sleep(10);//0.1초 대기

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

    }

}

 

//Runnable 인터페이스 방식

class ThreadWithRunnable implements Runnable {

    @Override

//실제 Thread가 수행할 작업

    public void run() {

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

            System.out.println(Thread.currentThread().getName());//쓰레드 이름

        try {

            Thread.sleep(10);

        } catch (InterruptedException e) {

            e.printStackTrace();

        

           }

         }

     }

}

 

public class main1 {

    public static void main(String[] args) {

        ThreadJava thread1 = new ThreadJava();//Thread 클래스 상속 방식 인스턴스화

        Thread thread2 = new Thread(new ThreadWithRunnable());//Runnable 인터페이스 방식 인스턴스화

 

        thread1.start();//Thread 시작

        thread2.start();//Thread 시작

    }

}

 

쓰레드의 우선순위

public static final int MAX_PRI 최대우선순위 : 10
public static final int MIN_PRI 최소우선순위 : 1
public static final int AVG_PRI 보통 우선 순위 : 5
setPriority(새로운우선순위값) 우선순위 값 설정
int getPriority() 우선순위 값 반환

쓰레드는 우선순이 값을 갖습니다. 우선순위에 따라서 쓰레드는 동작하며, 우선순위는 1~10을 가질 수 있습니다. 아무 설정도 없을 시 우선순위는 5입니다. setPriority로 우선순위를 설정해줄 수 있습니다.

 

자바 쓰레드 메소드

sleep(long millis, int nanos) 지정된 시간동안 쓰레드를 일시정지시킨다. 시간이 지나면 자동으로 실행대기 상태가 된다. (try-catch 블록을 사용하여 예외처리를 해야된다.)
join(long millis, int nanos) 지정된 시간동안 쓰레드가 실행되도록한다. 지정된 시간이 지나거나 작업이 종료되면 join()을 호출한 쓰레드로 돌아와 실행을 계속합니다.
void interrupt() sleep()이나 join에 의해 일시정지된 쓰레드를 다시 실행대기상태로 바꾼다.
void suspend() 쓰레드를 일시정지 시킨다. resume()이 호출되어야 실행대기상태가 된다.
void resume() suspend()로 일시정지된 쓰레드를 다시 실행대기상태로 만든다.
void yield() 실행 중에 자신에게 주어진 실행시간을 다른 쓰레드에게 양보하고 자신은 실행대기 상태가 된다.

 

쓰레드의 Life-Cycle

  1. 쓰레드가 생성되고 start()를 호출하면 바로 실행되는 것이 아니라 실행대기상태열에 저장되어 자신의 차례가 될 때가지 기다린다.
  2. 실행되기상태에 있다가 자신의 상태가 되면 실행된다.
  3. 주어진 실행시간이 다 되거나 yield()를 만나면 다시 실행대기상태가 되고 다음 차례의 쓰레드가 실행상태가 된다.
  4. 실행중 suspend(), sleep(), wait(), join(), I/0 block에 일시정지상태가 될 수 있다.
  5. 저장된 일시정지시간이 다되거나(time-out),notify(),resume(),interrupt()가 호출되면 일시정지상태를 벗어나 다시 실행대기열에 저장되어 자신의 차례를 기다린다.
  6. 실행을 모두 마치거나stop()이 호출되면 쓰레드는 소멸된다.

 

참조

1.https://dailyworker.github.io/java-thread/

 

Java Thread - 자바 쓰레드

개요해당 장에서는 멀티 스레드 프로그래밍의 개념을 잡기 위해서 프로세스와 쓰레드에 대한 내용을 학습한다. 블로그의 내용은 “자바의 정석 개정 3판”을 정리하였다.

dailyworker.github.io

2.http://tcpschool.com/java/java_usingMethod_overloading

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

'Java > Spring' 카테고리의 다른 글

[eGovFramework] 폼 검증(Form validation)하기  (0) 2020.06.15
Math 클래스  (0) 2020.05.25
String, StringBuffer  (0) 2020.05.25
[JSTL] import  (0) 2020.05.22
제네릭(Generic)  (0) 2020.05.20

댓글