BLOG main image



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");
}
}

반응형

+ Recent posts