Thread (1)

KIHYUK MOON·2023년 2월 3일
0
post-thumbnail
post-custom-banner

Main Thread

모든 자바 어플리케이션은 Main Thread가 main()메소드를 실행하면서 시작된다.
이러한 Main Thread 안에서 싱글 스레드가 아닌 멀티 스레드 어플리케이션은 필요에 따라 작업 쓰레드를 만들어 병렬로 코드를 실행할 수 있다. 싱글 스레드인 경우 메인이 종료되면 프로세스도 종료되지만, 멀티스레드는 메인스레드가 종료되더라도 실행중인 스레드가 하나라도 있다면 프로세스는 종료되지 않는다.

Thread 생성

Thread 클래스 상속

public class Sample {
    public static void main(String args[]){
        Thread subThread1 = new CustomThread(); // Thread를 상속한 객체 생성
        subThread1.start();
    }
}

// Thread 클래스 상속 받음
public class CustomThread extends Thread {
    @Override
    public void run() {
        int sum = 0;
        for(int i = 0; i <= 10; i++) {
            sum += i;
            System.out.println(sum);
        }
        System.out.println(Thread.currentThread() + "합 : " + sum);
    }
}

start() 메소드를 호출하면 작업 스레드는 자신의 run() 메소드를 실행한다.

Runnable 인터페이스 구현

new를 통해 Thread클래스 객체를 생성 후 start 메소드를 통해 다른 스레드에서 할 작업을 할당하는 방법.
Thread 객체를 생성할 때는 Runnable 인터페이스를 구현한 클래스 객체를 매개변수로 받는다.

public class Sample implements Runnable {
		// Runnable 인터페이스 상속 후 메소드 오버라이딩 완성
    @Override
    public void run() {
        int sum = 0;
        for(int i = 0; i <= 10; i++) {
            sum += i;
            System.out.println(sum);
        }
        System.out.println(Thread.currentThread() + "최종 합 : " + sum);
    }
    public static void main(String[] args) {
        Runnable task = new Sample(); //Runnable은 작업 내용을 가지고 있는 객체이지만 실제 쓰레드가 아님
        Thread subThread1 = new Thread(task);
        Thread subThread2 = new Thread(task);
        subThread1.start();
        subThread2.start();
    }
}

익명 구현 객체

  • 1회용 객체로 구현
public class Sample {
    public static void main(String[] args) {
        Runnable task = new Runnable() {
            @Override
            public void run() {
                int sum = 0;
                for(int i = 0; i <= 10; i++) {
                    sum += i;
                    System.out.println(sum);
                }
                System.out.println(Thread.currentThread() + "최종 합 : " + sum);
            }
        };
        Thread subThread1 = new Thread(task);
        Thread subThread2 = new Thread(task);
        subThread1.start();
        subThread2.start();
    }
}

람다식으로 구현

public class Sample {
    public static void main(String args[]){
        Runnable task = ()-> {
            int sum = 0;
            for (int index = 0; index < 10; index++) {
                sum += index;
                System.out.println(sum);
            }
            System.out.println( Thread.currentThread() + "최종 합 : " + sum);
        };

        Thread subTread1 = new Thread(task);
        Thread subTread2 = new Thread(task);
        subTread1.start();
        subTread2.start();
    }
}
profile
개발자 전직중..
post-custom-banner

0개의 댓글