본문으로 바로가기


자바 Thread를 만드는 방법은 크게 두가지가 있습니다.

1) extends Thread

2) implements Runnable


오늘은 Thread를 상속해서 만드는 방법을 포스팅하겠습니다.


1. 쓰레드를 만들 class 파일을 하나 만들고 다음과 같이 코딩


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
public class MyThread1 extends Thread {
    
    String str;
    public MyThread1(String str)
    {
        this.str = str;
    }
    
    @Override
    public void run() {
        // TODO Auto-generated method stub
        for(int i=0;i<10;i++)
        {
            System.out.println(str);                                                              
            
            try {
                
                Thread.sleep((int)Math.random()*1000);
                
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                
            }
            
        }
    }
        
}
 
cs



MyThread1클래스는 main은 없고 run 이란 메소드가 있습니다.

run 메소드는 MyThread1라는 객체가 실행이 될때 작동시키는 역할을 합니다.

실행은 start() 메소드를 통해 실행됩니다.

 

2. 쓰레드를 실행시킬 메인을 만들기 위한 class 파일을 생성 및 다음과 같이 코딩



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
public class ThreadExam {
 
    public static void main(String[] args) {
        
        MyThread1 t1 = new MyThread1("*");
        MyThread1 t2 = new MyThread1("-");
        
        t1.start();
        t2.start();
        
        System.out.println("main end!!!");
        //start는 준비를 하게 해주는 메소드
        //run은 실행할 준비가 시작이 되면 실행됨
        
        //메인스레드가 종료됬다고 해서 프로그램이 종료되는것이 아니다.
        //모든 스레드가 종료되어야지 프로그램이 종료되는것이다.
        
    }
    
}
 
 
cs


위에서 run() 메소드는 start() 메소드를 사용해서 실행할수 있다고 했습니다.

start()의 역할은 thread를 실행하기전 준비할수 있도록 해주는 역할을 하고

run()의 역할은 thread가 실행할 준비가 되면 실행시켜주는 역할을 합니다. 



<출력결과>




자바 쓰레드는 크게 메인쓰레드와 서브쓰레드로 나누어집니다.

메인쓰레드의 경우 클래스에 있는 main을 생각하시면 되고

서브쓰레드의 경우 개발자가 만든 쓰레드라고 생각하시면 됩니다.

쓰레드를 실행시켰을때 메인쓰레드가 우선순위가 되기 때문에 출력값에 main end!! 가 

먼저 찍히게 되고 서브 클래스들은 번갈아 가면서 쓰레드를 실행하기 때문에

위와 같은 결과가 나오게 됩니다.