우선 코드부터

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
public class MainThread{
    public static void main(String[] args){
        Thread mThread=Thread.currentThread();
        printThreadID(mThread.getName()+"-시작");
        
        Thread th1=new Thread(new RunInterface());
        Thread th2=new Thread(new RunInterface());
        Thread th3=new Thread(new RunInterface());
        Thread th4=new Thread(new RunInterface());
        
        th1.run();
        th2.run();
        th3.start();
        th4.start();
        
        printThreadID(mThread.getName()+"-종료");
    }
    
    protected static void printThreadID(String id){
        System.out.println(id);
    }
}
 
class RunInterface implements Runnable{
    @Override
    public void run(){
        Thread mThread=Thread.currentThread();
        MainThread.printThreadID(mThread.getName()+"-시작");
        for(int i=0;i<10;i++){
            MainThread.printThreadID(mThread.getName()+"-"+i);
        }
        MainThread.printThreadID(mThread.getName()+"-종료");
    }
}//RunInterface end
 

실행결과는 해보면 앎.

 

간단히 얘기하자면 각자 thread는 memory에서 stack을 call해서 이용한다. 이때 start()할 경우 개인의 thread를 만들고 개인의 call stack을 이용한다. 하지만 run()할 경우 thread를 만들고 thread를 만든 main thread의 context와 Thread-0,Thread-1의 context가 switching 되어 작업된다. 즉, run() method로 쓰레드를 사용할 경우 main thread의 call stack을 이용한다.

Posted by duehd88
,