# Thread

Kim taegwan·2026년 3월 29일

1. 쓰레드(Thread)란 뭘까?

Thread 란?

  • process란? 실행 중인 프로그램이 실행되면 OS로 부터 메모리를 할당받아 프로세스 상태가 된다.
  • 하나의 프로세스는 하나 이상의 thread를 가지게 되고, 실제 작업을 수행하는 단위는 thread이다.

2. 쓰레드를 추가로 만들어서 사용하는 방법을 알아 보자.

1. 첫번째 방법은 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
}

start()를 호출하면
JVM이 새 쓰레드를 만들고
새 쓰레드가 run() 안의 코드를 실행한다.


  1. 두번째 방법은 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");
    }
}

Runnable 인터페이스 안에는 핵심적으로 run() 메서드가 있다.
Thread t = new Thread(작업내용); 이렇게 정의 되있다 쓰레드 안에는
그리고 이 작업내용은 runnable타입만 들어갈 수 잇다

0개의 댓글