쓰레드 프로그래밍이 어려운 이유는 동기화(synchronization)과 스케쥴링(scheduling)때문이다.
앞서 우선순위를 통해 쓰레드간의 스케줄링을 하는법을 아주 조금 배웠다.
효율적인 멀티쓰레드 프로그램을 만들기 위해서는 보다 정교한 스케쥴링을 통해 프로세스에게 주어진 자원과 시간을 여러 쓰레드가 낭비없이 잘 사용하도록 프로그래밍 해야한다.
쓰레드의 스케쥴링을 잘하기 위해서는 쓰레드의 상태와 관련된 메소드를 잘 알아야한다.
**resume(), stop(), suspend()는 쓰레드를 교착상태(dead-lock)으로 만들기 쉽기 때문에 deprecated되었다.
표와 대응해 보면서 쓰레드의 상태변화를 익히자.
sleep(long millis)
sleep(long millis, int nanos)
지정된 시간동안 쓰레드를 멈추게하는 메소드이다.
밀리세컨드와 나노세컨드의 시간단위로 세밀하게 값을 지정할 수 있다. 하지만 오차가 발생할 수 있다.
나노세컨드의 값의 범위는 0~999999까지이다. 999999나노세컨드는 1밀리세컨드 정도이다.
try{
Thread.sleep(1, 500000);
}catch(InterruptedException e){}
0.0015초 동안 멈추게 한다.