티스토리 뷰

public class test {
    public static void main(String args[]) {
        //System.out.println("test");

        Thread1 t1 = new Thread1();
        Thread2 t2 = new Thread2();
        t1.start();
        t2.start();

        try {
            t1.sleep(2000);
        } catch (InterruptedException e) {}

        System.out.print("<main fin.>");

    }
}

class Thread1 extends Thread {
    public void run() {
        for(int i=0 ;i<300; i++) {
            System.out.print("-");
        }
        System.out.print("<th1 fin.>");
    }
}

class Thread2 extends Thread {
    public void run() {
        for(int i=0 ;i<300; i++) {
            System.out.print("|");
        }
        System.out.print("<th2 fin.>");
    }
}


실행시마다 그때그때 결과 다름.


  • main의 sleep문 삭제시
    이 가장 먼저 출력되고, 이후 -, |, <th1,2 fin.> 들이 출력되는 결과를 보임.
    try {
      t1.sleep(2000);
    } catch (InterruptedException e) {}
    코드만 보면 t1에 2초 지연을 주었으므로 이 가장 마지막에 출력될것으로 예상.
    이는 sleep()이 항상 현재 실행 중인 Thread에 대해 작동하는 특성 때문으로,
    t1으로 호출하였어도 실제로 영향을 받는 것은 main메서드를 실행하는 main thread임을 알려준다.
    따라서 sleep()은 static으로 선언되어 있으며 위와 같이 참조변수로 호출하기보다는, Thread.sleep(2000);과 같이 해야한다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함