본문 바로가기
Programming/Java, Spring

[Java 기초문법] 자바 쓰레드, thread 상속 받기, runnable 인터페이스

by Renechoi 2022. 10. 21.

[Java 기초문법] by Programmers school 자바 입문

 

 


Thread 클래스를 상속받기 

 

java.langThread 클래스를 상속받고 run() 메소드를 오버라이딩 한다. 

 


public class Mythread extends Thread{
    
    @Override
    public void run(){
        super.run();
    }
}

 

 

String 메소드를 만들고 run에서 이를 10번 출력하게 해보자. 

 

출력이 너무 빠르기 때문에 텀을 준다. 

 

@Override
public void run(){
    for (int i = 0; i < 10; i++){
        System.out.println(str);
        try {
            Thread.sleep((int) Math.random()*1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}

 

메인 메소드에서 Thread를 호출할 때 start()를 시켜주는 함수를 사용한다. 

t1.start();

 

이 코드를 읽으면서 기존의 흐름 외에 하나가 추가되면서 수행 흐름이 2개로 나뉘게 된다. 

 

 

main에는 함수 종료를 나타내기 위해 string을 입력한다. 

 

이것으로 main이 종료되어도 아직 끝나지 않은 쓰레드들이 돌아가고 있음을 알 수 있다. 

 


public class Mythread extends Thread{

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

    @Override
    public void run(){
        for (int i = 0; i < 10; i++){
            System.out.println(str);
            try {
                Thread.sleep((int) Math.random()*1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }

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

        t1.start();
        t2.start();

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

 

 

 

 

 


 

Runnable 인터페이스 이용하기 

 

 

public class Mythread implements Runnable {

 

러너블 인터페이스를 받도록 한다. 

 

이때 thread 객체를 만들어서 보내주어야 한다. 

 

public class Mythread implements Runnable {
    String str;
    public Mythread(String str){
        this.str = str;
    }

    public void run(){
        for(int i = 0; i < 10; i ++){
            System.out.print(str);
            try {
                Thread.sleep((int)(Math.random() * 1000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
            Mythread r1 = new Mythread("*");
            Mythread r2 = new Mythread("-");

            Thread t1 = new Thread(r1);
            Thread t2 = new Thread(r2);

            t1.start();
            t2.start();
            System.out.print("!!!!!");
        }
    }

 

마찬가지로 main이 먼저 종료되고 t1과 t2가 돌아가고 있음을 확인할 수 있다. 

 

 

 

 

 

반응형