JAVA 유용한 클래스

(JAVA)자바 Thread - 5

mynote6676 2025. 4. 25. 17:33

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

Thread 란?

-process란? 실행 중인 프로그램 실행되면 OS로 부터 메모리를 할당받아 프로세스 상태가 된다.

-하나의 프로세스는 하나 이상의 thread를 가지게 되고, 실제 작업을 수행하는 단위는 thread이다.

 

 

 

1. 첫번째 방법은 Thread 클래스 상속하여 만들 수 있습니다.

 

package 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.println("worker " + name + " : " + i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e1) {
                System.out.println("외부에서 신호를 받아서 예외가 발생 됐어!!");
                e1.printStackTrace(); // 예외가 발생한 부분들 좀 더 상세히 출력해 (추적)
            }
        }
    }
}
----------------------------------------------------------------------------------------------

package thread;

public class WorkerMainTest {

    // 메인 쓰레드
    public static void main(String[] args) {

        // 사용하는 방법
        System.out.println("--------- main 쓰레드 시작 -------------");
        // 현재 쓰레드가 누구인지 알아보는 명령어 .
        System.out.println(Thread.currentThread()); // [#1,main,.....]

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

        System.out.println("--------- main 쓰레드 종료 -------------");

    } // end of main

} // end of class

------------------------------------------------------------------------------------------------------------

2. 두번째 방법은 Runnable 인터페이스 구현하여 만들 수 있습니다.

 

package thread;

public class Worker2 implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 200; i ++) {
            System.out.print( i+ "\t");
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

-------------------------------------------------------------------------------------------------

package thread;

public class Worker2MainTest {

    // 메인 쓰레드
    public static void main(String[] args) {

        // 상속을 활용한 쓰레드 생성
        // Worker worker1 = new Worker("워커1");
        // worker1.start();

        // 2. 인테페이스를 활용해서 쓰레드를 start() 시키는 방법
        Worker2 worker2 = new Worker2();
        // 인터페이스를 사용했을 때 start() 메서드가 없어서 실제 동작을 못 시키고 있다.
        // worker2.start();
        Thread subT1 = new Thread(worker2);
        subT1.start();


    } // end of main

} // end of class

----------------------------------------------------------------------------------------------------------------
3. 쓰레드의 실행시 쓰레드 상태라는 개념을 알아 보자