최원종의 개발 블로그

Thread 본문

Java/JAVA 유용한 클래스

Thread

chl6698 2026. 3. 10. 17:43

Thread :  하나의 프로세스는 하나 이상의 thread를 가지게 되며, thread는 자바에서 실제 작업을 수행하는 단위이다.

  • process란 실행 중인 프로그램이 실행되면 OS로부터 메모리를 할당받아 프로세스 상태가 된다
  • process는 실행 중인 프로그램 자체 (ex: 크롬 하나 실행, 카카오톡 하나 실행)
  • Thread는 그 프로세스 안에서 실제 일을 하는 실행 흐름 (ex: 크롬 안에서 입력 처리, 동영상 재생, 네트워크 통신 등등)
프로세스 = 큰 작업 공간
스레드 = 그 안에서 일하는 작업자

 


run()과 start() 차이

run()

  • 그냥 메서드 호출
  • 새 스레드가 안 만들어짐.

start()

  • 운영체제에게 새 스레드를 실행하라고 요청함.
  • 그러면 새 스레드가 만들어지고 그 안에서 run()이 실행.

Thread 상태 종류

NEW : 스레드 객체만 생성됨
RUNNABLE : 실행 가능한 상태
TIMED_WAITING : sleep() 등으로 잠시 대기
WAITING : 다른 작업 기다리는 상태
TERMINATED : 실행 종료

 

 


Thread 클래스 상속 코드

package com.tenco.thread;

/**
 * 기본 문법 복습
 * 1. 상속을 사용해서 쓰레드를 만들 수 있다 (작업자 만들기)
 */
public class Worker extends Thread {

    private String name;

    public Worker(String name) {
        this.name = name;
    }

    // 약속되어 있는 부분 run() 안에 해야할 일의 정의한다.
    // start() 실행시키면 run() 안에 부분이 동작 한다.

    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            System.out.print("worker " + name + " : " + i + "\n");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
package com.tenco.thread;

public class WorkerMain {

    // 메인 쓰레드
    public static void main(String[] args) {
        // 사용하는 방법
        System.out.println("---- main 쓰레드 시작 ----");
        System.out.println(Thread.currentThread());

        // 작업자 하나 만들어 내기 (만드는 일은 메인 쓰레드가 한다)
        Worker worker1 = new Worker("워커1");
        // 너가 위임 받은 일을 시작해
        worker1.start();


        System.out.println("---- main 쓰레드 종료 ----");
    } // end of main
}

Runnable 인터페이스 구현 코드

package com.tenco.thread;

// 쓰레드를 사용하는 문법
// 2번째. Runnable 인터페이스를 구현해서 쓰레드를 만들 수 있다.
public class Worker2 implements Runnable {

    // run() -> 위임 시키고자 하는일 명시하는 곳
    // 실행은 Thread().start() 로 호출해야 여기 부분이 일을 한다.
    @Override
    public void run() {
        int i;
        for(i = 0; i < 200; i++) {
            System.out.print(i + "\t");
        }
    }
}

 

-Thread객체를 생성 후 생성자에 Runnable 타입을 넣어서 start()메서드 호출 가능

package com.tenco.thread;

public class WorkerMain2 {

    public static void main(String[] args) {
        System.out.println("main thread start");
        Worker2 worker2 = new Worker2(); // 메인 쓰레드가 서브 쓰레드 생성
        // worker2.start();
        //orker2.run(); // run() 메서는 그냥 메서드를 호출할 뿐이지 쓰레드를 동작시킨건 아니다. 주의
        // 익명 클래스
        new Thread(worker2).start(); // 서브 작업자가 일을 시작 함
        System.out.println("main thread end");
    }
}

 

'Java > JAVA 유용한 클래스' 카테고리의 다른 글

멀티 스레딩(multi-threading)  (0) 2026.03.13
Inner class(중첩 클래스)  (0) 2026.03.12
Exception(예외처리)  (0) 2026.03.10
String, StringBuffer  (0) 2026.03.10
Object 클래스의 메서드 활용  (0) 2026.03.09