public class test {


public static void main(String[] args) {
    Thread atr = new AThread();
    Thread btr = new BThread();
    atr.start();
    btr.start();
}

 

}
class AThread extends Thread
{
    public void run()
    {
        int i;
        for (i = 0; i <= 5000; i++){
            System.out.println(" A ");
            Thread.yield(); // for문이 돌때마다 지금Thread를 잠시 멈추고 다른 Thread를 실행한다.
         }
    }
}

class BThread extends Thread
{
    public void run()
    {
        int i;
        for (i = 0; i <= 5000; i++)
        {
            System.out.println(" B ");
            Thread.yield(); // for문이 돌때마다 지금Thread를 잠시 멈추고 다른 Thread를 실행한다.
        }
    }
}


멀티스레드 프로그램은 여러 개의 스레드를 갖는 프로그램이지만
실제로 그런 스레드가 동시에 생행되는 것은 아니라는 사실입니다.

자바 가상 기계는 멀티스레드 프로그램을 실행할 때 프로그램의
실행 시간을 아주 작은 간격으로 나누어서 스레드를 번갈아 실행할 뿐입니다.

그런데 자바 가상 기계가 스레드에 할당하는 시간과 실행 순서는 하드웨어의 성능이나
시스템 환경에 따라 달라질 수 있습니다.

-뇌를 자극하는 자바 686쪽 내용

그래서 실행한 결과는 다른 사람과 같게 나오지 않을수 있습니다.
그럼 sleep를 넣었을 때는 위에 설명과 같이 결과값이 일정하게 나오지 않을수 있습니다.
단지 sleep를 넣어서 조금더 일정하게 나오게끔 자바 가상 기계에게 여유를 줄수 있을 뿐입니다.
 

하지만 yield은 위에 예제로 올리신 내용에 주석 처럼 AThread 와 BThread가 서로 한번씩 번가라 가며 실행 될것입니다.
그럼 어떤 환경에서도 같은 결과 값이 나오겠지요.

 


 

'Java' 카테고리의 다른 글

[Java] 웹개발 로드맵  (0) 2010.07.06
[Java] File  (0) 2010.07.02
[Java] Java, Xml연결  (0) 2010.06.23
[Java] Ant, Eclipse에서 jar만들기  (0) 2010.06.23
[Java] 페이지 이동  (0) 2010.06.22

+ Recent posts