2016-06-09 2 views
0

아래의 코드 스 니펫은 t1, T2 및 T3이 순차적으로 실행되기 시작하도록 보장합니까?Sleep을 사용하면 Thread의 실행 순서가 보장됩니까?

public class ThreadExecDemo { 
    public static void main(String[] args) throws InterruptedException { 
     Thread t1 = new Thread(new ThreadDemo(),"t1"); 
     Thread t2 = new Thread(new ThreadDemo(),"t2"); 
     Thread t3 = new Thread(new ThreadDemo(),"t3"); 
     t1.start(); 
     Thread.sleep(5); 
     t2.start(); 
     Thread.sleep(5); 
     t3.start(); 
    } 
} 

class ThreadDemo implements Runnable { 
    @Override 
    public void run() { 
     System.out.println(Thread.currentThread().getName()+" is running "); 
    } 
} 
나는 아직 코멘트를 추가 그래서 여기에 게시 할 수
+3

수면은 동기화 프리미티브가 아닙니다. 마음에서 그런 생각을 제거하십시오 - 지금, 제발. –

답변

4

짧은 답변 : 제

긴 대답 : 아니요 안정적으로 (? 왜 당신도 원하는 것) 수면에 의해 스레드의 스케줄링에 영향을 미칠 수 없습니다. 스레드를 시작하면 다른 스레드 (주 스레드 포함)와 비동기 적으로 실행되며 스케줄 된 시점을 제어 할 수 없습니다. 당신도 신경 써야합니다.

0

"클래스 RunThreadsInOrder"무엇을합니까와 일반 솔루션을 확인 여기 순서로 running 3 threads in sequence java

를 스레드를 실행에 대한 꽤 괜찮은 스택 오버플로 대답은 실제로있다 동기화 된 잠금을 사용하고 싶습니다.

+2

해당 링크가 질문에 대한 답변을 제공 할 수 있지만 적절한 요약과 관련 정보를 제공 할 수 있다면 이상적입니다. 그렇지 않으면 링크가 끊어 지거나 페이지의 내용이 변경되면 응답이 잘못되거나 쓸모 없게 될 수 있습니다. –

1

@Nathan Hughes가 말했듯이, 아니요, 스레드가 순서대로 실행되기 시작한다는 보장은 없습니다.

추론 : Sleep()은 지정한 밀리 초 내에 발생할 수있는 타임 슬리어 수에 대해 현재 스레드를 차단합니다. 그러나 타임 슬라이스의 길이는 특정 버전의 Windows 또는 프로세서에서 실제로 다릅니다. 그 결과, 수면()수면() 를 사용하지 않는 특정 순서

시도에서 스레드를 실행하려고, 귀하의 경우, 타이밍에 유용하지 않거나 - 내 의견으로는, 수면 아니라 테스트/디버깅 중에 길거나 계산 집중적 인 작업을 시뮬레이션하는 데 유용합니다.

+1

이것은 Java 관련 질문입니다. – VGR

+0

아직 질문에 답변 ... 나는 관련성이없는 정보를 제거합니다. @VGR –

+0

의 헤드를 보내 주셔서 감사합니다. 답변에있는 모든 내용은 Java와 완전히 관련됩니다 (미래의 독자들에게 알립니다). –

관련 문제