Java/Java

Java Thread

검은고양이개발자 2023. 1. 21. 17:59
반응형

Thread 란 무엇일까??

 

Thread는 프로세스 내부에서 독립적으로 실행되는 각각의 작업 단위를 지칭합니다.

 

다음의 코드는 Thread를 이용하지 않고 실행했을 경우입니다.

 

public class PrThread extends Thread {

    String name ;

    public PrThread(String a){name=a;}

    public void run() {

        System.out.println("내 이름은 "+name+"입니다");
        for (int i = 0; i < 4; i++) {
            System.out.println("첫번째 " + i + " 입니다");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        String[] a = {"이재관","고양이","코딩"};
        for(int i=0; i<a.length; i++) {
            PrThread pr = new PrThread(a[i]);
            pr.run();
            System.out.println();
        }
    }
}
//호출
내 이름은 이재관입니다
첫번째 0 입니다
첫번째 1 입니다
첫번째 2 입니다
첫번째 3 입니다


내 이름은 고양이입니다
첫번째 0 입니다
첫번째 1 입니다
첫번째 2 입니다
첫번째 3 입니다


내 이름은 코딩입니다
첫번째 0 입니다
첫번째 1 입니다
첫번째 2 입니다
첫번째 3 입니다

 

우리가 원래 아는 프로세스대로 run()이라는 메서드를 실행했을 때 하나의 작업이 끝난 뒤에

다음 작업을 실행하는 것을 볼 수 있습니다.

 

다음의 코드는 Thread를 이용했을 때의 코드입니다.

 

public class PrThread extends Thread {

    String name ;

    public PrThread(String a){name=a;}

    public void run() {

        System.out.println("내 이름은 "+name+"입니다");
        for (int i = 0; i < 4; i++) {
            System.out.println("첫번째 " + i + " 입니다");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        String[] a = {"이재관","고양이","코딩"};
        for(int i=0; i<a.length; i++) {
            PrThread pr = new PrThread(a[i]);
            pr.start();
            System.out.println();
        }
    }
}
//출력
내 이름은 코딩입니다
내 이름은 이재관입니다
내 이름은 고양이입니다
첫번째 0 입니다
첫번째 1 입니다
첫번째 0 입니다
첫번째 0 입니다
첫번째 1 입니다
첫번째 2 입니다
첫번째 3 입니다

첫번째 2 입니다
첫번째 1 입니다
첫번째 3 입니다

첫번째 2 입니다
첫번째 3 입니다

 

이전에 Thread를 응용했을 때와는 다르게 출력값이 뒤죽박죽인 걸 볼 수 있습니다.

왜 이런 출력값이 나왔을 까요?

 

그 이유는 Thread를 상속받은 class의 객체를 만든 뒤 참조변수명. start()를 하게 되면

run() 메서드가 실행이 되는데 이때 run() 메서드 안의 명령들이 동시다발적으로 이루어지기 때문입니다.

때문에, 저 코드를 실행시시키게 되면 출력값의 순서들이 계속 변하는 것을 확인할 수 있습니다.

 

기존에는 한 번에 하나의 행동밖에 하지 못했지만 Thread를 활용하면 동시에 두자기 이상의 활동이 가능해지게 됩니다.

ex) 세탁기를 돌리면서 밥을 먹으면서 유튜브를 본다 /

 

Thread 구현 방법

 

이러한 장점이 있는 Thread를 구현하는 방법에 대해 알아봅시다.

Thread를 구현하는 데에는 두 가지 방법이 있습니다.

 

기본적으로 Thread를 통해 구현하려는 메서드는 run()을 사용하고

그 run()을 실행시키는 방법으로 start()를 사용합니다.

 

1. Thread 클래스 상속 (Thread를 상속받고 객체를 만들어 사용) --> 위의 코드 둘 다 이를 사용하였습니다.

2. Runnable 인터페이스 상속(Runnable을 implements 한 뒤 Thread 클래스로 객체생성)

 

public class Thread3 implements Runnable {

    @Override
    public void run() {
        System.out.println("안녕");
    }

    public static void main(String[] args) {
        Thread thread = new Thread(new Thread3());
        thread.start();
    }
}

 

 

반응형