본문 바로가기

Language/Java

Runnable

<개요>

runnable도 Thread와 마찬가지로 병렬 수행을 하기 위한 것이다.

둘의 차이는 다음과 같다. Thread는 클래스이고 runnable은 인터페이스란 것이다. 단일 상속 원칙에 따라 Thread를 상속한 자식 클래스는 다른 부모 클래스를 상속하지 못하지만, runnable를 구현한 클래스는 병렬처리 기능을 쓰면서 다른 클래스나 인터페이스를 장착할 수 있다.  

1. 코드 리뷰

import Chap_12.clean.CleanRunnable;

public class _02_Runnable {
    public static void main(String[] args) {
        // 쓰레드를 만드는 방법 2가지
        // 1. Thread 라는 클래스 상속해서 만들기
        // 2, Runnable 이라는 인터페이스 구현해서 만들기


        //1. runnable 구현한 클래스의 객체 생성
        CleanRunnable cleanRunnable = new CleanRunnable();
        //2. Thread 객체 생성해서 안에 인자로 넣기
        // 이렇게 하는 이유 Thread 클래스는 무조건 run 매소드를 구현 해주어야 했다.
        // 근데 runnable 인터페이스 구현한 객체는 run 매소드를 구현 했으므로 인자로 넣어주면
        // Thread는 run을 구현할 필요가 없다. 
        Thread thread = new Thread(cleanRunnable);
        //3. runnable 객체가 아닌 그걸 넣은 Thread 객체를 이용
        thread.start();
        cleanByBoss();

    }

    public static void cleanByBoss() {
        System.out.println("--사장 청소 시작--");
        for (int i = 1; i <= 10; i+=2) {
            System.out.println("(사장) " + i + "번방 청소 중");
        }
        System.out.println("-- 사장 청소 끝--");
    }
}
public class CleanRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println("--직원 청소 시작(Runnable)--");
        for (int i = 2; i <= 10; i+=2) {
            System.out.println("(직원) (Runnable) " + i + "번방 청소 중");
        }
        System.out.println("--직원 청소 끝(Runnable)--");
    }
}

2. 스스로 해보기 

public class RunnableGoal implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println((i+1)+"번째 골!!!!");
        }
        System.out.println("경기 끝.");
    }
}
public class Runnable_myself {
    public static void main(String[] args) {

        RunnableGoal G = new RunnableGoal();
        Thread t = new Thread(G);
        t.start();
        shoot();

    }
    public static void shoot () {
        for (int i = 0; i < 10; i++) {
            System.out.println((i+1)+"번 째 슛!!!!");
        }
        System.out.println("-------------경기 끝!------------");
    }
}

 

** 참고 

병렬처리 결과는 프로그램 돌릴 때마다 다르게 나온다. 

매소드가 일을 빨리 끝낼 수도 있고 Thread가 일을 빨리 끝낼 수도 있다. 

'Language > Java' 카테고리의 다른 글

Enum에 대하여  (0) 2024.01.16
몰랐던 것  (0) 2023.05.21
Thread  (0) 2023.03.09
Throws (예외 처리 미루기)  (0) 2023.03.02
사용자 정의 예외  (0) 2023.03.02