반응형


Java Thread


스레드란??


현재 이 게시물을 보는 사용자가 c언어로 프로그래밍 하고, 콘솔에서 결과물을 확인하고 있다고 가정하자.


콘솔창에는 단 하나의 커서와 단 하나의 화면이 존재한다.


하지만 사용자는 여러가지 행동을 동시에 표현하고 싶다. 그렇지만, while문으로는 한계가 있다는 것을 느낄 수 있을 때가 다가온다.


그때 스레드라는 개념을 보면 신세계를 맞이 할 수 있을것이고, 그 때 이 내용을 본다면 더 와닿고 잘 응용할 수 있는 밑거름이 될 것이다.


스레드는 결국, 하나의 프로그램(프로세스)에서 여러 행동을 할 수 있도록 도와주는 역할을 한다.



Java든, C든 C++이든 어떤 언어간에 Thread의 코딩 방식이 다를 뿐, 개념은 모두 매 한가지이다.



스레드 개념 :: http://www.crocus.co.kr/481


스레드를 더 알아보고 싶다면, 이 기초 내용을 넘어서서 응용할 수 있는 상황,


그리고 응용할 때 부딪히는 내용들에 대해 알고 싶다면 아래 주소를 클릭하여 개념을 확인해 보길 바란다.



다중 스레드를 이용할 때 필요한 장치 (뮤텍스) :: http://www.crocus.co.kr/486

다중 스레드를 이용할 때 필요한 장치 (세마포어) :: http://www.crocus.co.kr/487

위의 장치를 이용할 때 생기는 현상 (데드락) :: http://www.crocus.co.kr/524 





run이라는 메소드는 extends Thread를 통해 스레드 클래스를 상속하면 스레드 클래스 내부 메소드로 존재하는데


start()를 통해 실행하면 스레드는 run을 통해 자신의 CPU 리소스를 할당받는 차례마다 for문을 돌리게 된다. 



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
32
33
34
35
36
37
38
39
40
41
42
43
package JavaBasic;
 
 
public class Jmain{
    
    public static void main(String []args)
    {
        class Car extends Thread{
            String carName;
            int pos;
            
            Car(String carName,int pos){
                this.carName = carName;
                this.pos = pos;
            }
            
            public void run(){
                for(int i = 0; i <= 30; i++)
                {
                    try{
                        //Thread.sleep(10);
                        
                        System.out.println(carName + " 전진 거리 :: " + (pos+i));
                    }
                    catch(Exception e){
                        
                    }
                }
            }
        }
 
        Car car1 = new Car("car1",15);
        Car car2 = new Car("car2",20);
        Car car3 = new Car("car3",0);
        car1.start();
        car2.start();
        car3.start();
        
    }
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus




(마지막 부분은 생략하였습니다.)


결과를 보면 알 수 있듯이, car1부터시작해서 car3으로 끝나는것이 아닌, 


car1->car3->car2로 출발하여 제 각각 자신이 CPU 리소스를 할당 받을 때 마다 움직임을 확인 할 수 있다.

반응형