[쓰레드 생성]

hamonjamon·2022년 7월 31일
0
post-custom-banner
  • 자바에서 쓰레드를 만드는 방법은 크게 2가지가 존재한다.
  1. Thread 클래스를 상속받는 방법
  2. Runnable 인터페이스를 구현하는 방법


Thread 클래스를 상속받는 방법

public class MyThred1 extends Thread {
    String str;

    public MyThred1(String str) {
        this.str = str;
    }
    
    // 실제 스레드 내부에서 구현하고 싶은 것을 다음의 메서드에서 수행한다.
    @Override

    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(str);

            try {
                // Math.random() == 0.0 ~ 1.0 사이의 값
                Thread.sleep((int) (Math.random() * 1000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }
}
public class ThreadExam {

    public static void main(String[] args) {
        MyThred1 thred1 = new MyThred1("*");
        MyThred1 thred2 = new MyThred1("-");

        // 스레드 동작 시 run()이 아닌 start()를 먼저 호출한다.
        // start() : 스레드 동작 준비 (필수)
        thred1.start();
        thred2.start();
        // 수행 흐름이 3갈래


        System.out.println("main end~~");
    }
}

Runnable 인터페이스를 구현하는 방법

public class MyThread2 implements Runnable {
    String str;

    public MyThread2(String str) {
        this.str = str;
    }

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(str);

            try {
                // Math.random() == 0.0 ~ 1.0 사이의 값
                Thread.sleep((int) (Math.random() * 1000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }
}
public class ThreadExam {

    public static void main(String[] args) {
        MyThread2 t1 = new MyThread2("*");
        MyThread2 t2 = new MyThread2("-");

        // Thread를 상속받은게 아니라, Runnable을 상속받아 start()가 없다.

        // Thread의 경우 생성자에 Runnable을 상속받은 인스턴스를 넣을 수 있다.
        Thread thread1 = new Thread(t1);
        Thread thread2 = new Thread(t2);

        thread1.start();
        thread2.start();

        System.out.println("main method end");
    }
}

post-custom-banner

0개의 댓글