vs에서 검증을 해보면 알 수 있는데 쓰래드에서 특정 멤버함수를 호출해 쓰래드형식으로 써도 Sleep은 해당 쓰래드에만 적용되며
다른 쓰래드에서는 여전히 실행하게된다
http://cafe.naver.com/cstudyjava/30338
Thread 가 슬립을 해도 다른 쓰레드는 돌아가도록 되어있습니다.
"여러개의 Thread 가 동시에 돌아가는 것 처럼 보이지만 하나만 돌아간다"는 Context switch 를 얘기하는 것이 맞지만
하나의 Thread 가 Sleep 된다는것은 해당 슬립기간 동안 다른 Thread 들이 Cpu를 점유한다는 의미겠죠. :)
(다른 Thread 들도 기다린다는 의미는 아닙니다.)
아래의 예제를 조금씩 바꿔가며 테스트해보세요. :)
public class Main
{
public static int nPublic = 0;
public static void main( String[] args)
{
final Thread t1 = new Thread() {
public void run()
{
for( int i=0; i<1000; ++i)
{
System.out.println( "nPublic :" + nPublic);
try { sleep( 1); } catch( InterruptedException e) { e.printStackTrace(); }
}
}
};
final Thread t2 = new Thread() {
public void run()
{
for( int i=0; i<1000; ++i)
{
++nPublic;
try { sleep( 1); } catch( InterruptedException e) { e.printStackTrace(); }
}
}
};
t1.start();
System.out.println("------------------------------------------ start thread1");
System.out.println("------------------------------------------ start sleep()");
try {
Thread.sleep( 1000);
} catch( InterruptedException e) { e.printStackTrace(); }
System.out.println("------------------------------------------ end of sleep()");
t2.start();
System.out.println("------------------------------------------ all threads were executed");
}
}
반응형
'운영체제 & 병렬처리 > Multithread' 카테고리의 다른 글
InitializeCriticalSectionAndSpinCount (0) | 2012.12.24 |
---|---|
CreateThread, _beginthread, _beginthreadex 에 대한 정리 (0) | 2012.12.23 |
유저모드 동기화 , 인터락, 크리티컬 섹션 (0) | 2012.11.01 |
Critical Section [CPU가 여러개일때 동기화] (1) | 2012.11.01 |
MFC용 쓰래드 사용법 - MFC MultiThread (Work / UI Thread) (0) | 2012.11.01 |