'run()'에 해당되는 글 2건

  1. 2013.03.13 자바 쓰레드 테스트2
  2. 2013.03.13 자바 쓰레드 테스트
posted by 구름너머 2013. 3. 13. 16:00

소스1:

class PingPong2 {
    synchronized void hit(long n) {
        for(int i = 1; i < 3; i++)
            System.out.print(n + "-" + i + " ");
    }
}

 

소스2:

public class Tester implements Runnable {
    static PingPong2 pp2 = new PingPong2();
    public static void main(String[] args) {
        new Thread(new Tester()).start();
        new Thread(new Tester()).start();
    }
    public void run() { pp2.hit(Thread.currentThread().getId()); }
}

 

예상 결과: n-1 n-2 n-1 n-2

실제 실행 결과 :  D:\studyjava>C:\jdk1.6.0_34\bin\java Tester
8-1 8-2 9-1 9-2

posted by 구름너머 2013. 3. 13. 15:49

1. main메소드에서 쓰레드의 start메소드를 호출한다.

2. start()는 쓰레드가 작업을 수행하는데 사용될 새로운 호출스택을 생성한다.

3. 생성된 호출스택에 run()를 호출해서 쓰레드가 작업을 수행하도록 한다.

4. 호출스택이 2개이므로 스케줄러가 정한 순서에 의해서 번갈아 가며 실행된다.

5. 새로운 쓰레드를 생성하고 실행시킬 때마다 새로운 호출스택이 생성되고 쓰레드가 종료되면 작업에서 사용된 호출스택은 소멸된다.

6. run()의 수행이 종료된 쓰레드는 호출스택이 모두 비워지면 이 쓰레드가 사용하던 호출스택은 사라진다.

7. main()의 작업을 수행하는 것도 쓰레드이다.

8. 프로그램을 실행하면 기본적으로 하나의 쓰레드를 생성하고, 그 쓰레드가 main()를 호출해서 작업이 수행되도록 하는 것이다.

9. main메소드가 수행을 마쳐싸하더라도 다른 쓰레드가 아직 작업을 마치지 않은 상태라면 프로그램이 종료되지 않는다.

10. 실행 중인 사용자쓰레드가 하나도 없을 때 프로그램은 종료된다.

case I:

public class Starter extends Thread {
    private int x = 2;
    public static void main(String[] args) throws Exception {
        new Starter().makeItSo();
    }
    public Starter(){
     System.out.println("start Starter()..");
        x = 5;
        System.out.println("start Starter()x="+x);
        start();
        System.out.println("start Starter().start().x="+x);
    }
    public void makeItSo() throws Exception {
     System.out.println("start makeItSo");
        join();
        System.out.println("start makeItSo().join().x="+x);
        x = x - 1;
        System.out.println(x);
    }
    public void run() {
        System.out.println("start run");
     x *= 2;
     System.out.println("start run.x="+x);
    }
}

결과:

start Starter()..
start Starter()x=5
start Starter().start().x=5
start makeItSo
start run
start run.x=10
start makeItSo().join().x=10
9

 

case II:

public class Starter extends Thread {
    private int x = 2;
    public static void main(String[] args) throws Exception {
        new Starter().makeItSo();
    }
    public Starter(){
     System.out.println("start Starter()..");
        x = 5;
        System.out.println("start Starter()x="+x);
        start();
        System.out.println("start Starter().start().x="+x);
    }
    public void makeItSo() throws Exception {
     System.out.println("start makeItSo");
        //join();
        System.out.println("start makeItSo().join().x="+x);
        x = x - 1;
        System.out.println(x);
    }
    public void run() {
        System.out.println("start run");
     x *= 2;
     System.out.println("start run.x="+x);
    }
}

 

결과:

start Starter()..
start Starter()x=5
start Starter().start().x=5
start makeItSo
start makeItSo().join().x=5
4
start run
start run.x=8

'JAVA' 카테고리의 다른 글

http://www.xgenesis.org/scjp/  (0) 2013.03.13
자바 쓰레드 테스트2  (0) 2013.03.13
java 소스분석  (0) 2012.03.08
JAVA 이전버전 설치하기  (0) 2011.04.05
GoF Design Patterns - 다시보는 Singleton (Java, C# .Net )  (0) 2011.01.24