2009-10-21 3 views
2

인사말,연속 스레드

나는 다음과 같은 작업을 해결하기 위해 노력하고있어. 예를 들어 그들 각각의 출력은 다음과 같은 순서로 번호입니다해야합니다

스레드 1 스레드 2 ... 스레드 N

어떻게 등, 플래그없이 (/ 대기 통지하고 동기화 방법만을 사용하여이 작업을 수행 할)?

P. 불쌍한 내 영어 : 죄송합니다

+2

숙제 문제가 있습니까? 그렇지 않다면 왜 이것을 사용하여 스레드를 사용하고 싶습니까? –

+0

println은 동시에 사용하면 훨씬 빠릅니다 :) ... 숙제 같은 것 같습니다. – Esko

+0

은 라운드 로빈 스케줄러를 구현하려는 것 같습니다. –

답변

3

방법에 대해 : 동시 실행이 필요하지 않은 경우

thread1.run(); 
thread2.run(); 
thread3.run(); 

새로운 스레드가 필요하지 않습니다. 단일 스레드는 스레드의 본문을 연속적으로 실행할 수 있습니다.

이 간단한 접근 방식이 효과가 없다면 (즉, 숙제에 대한 교사의 기대치를 충족시키는 경우) 문제의 문제를 명확히하십시오.

+0

"Thread 1, Thread 2, Thread 3"이 인쇄 될 것이라는 보장이 없습니다. –

+0

@ (Alexander Pogrebnyak) 그렇습니다. – NawaMan

+2

Alexander, 그는 .start()가 아닌 .run()을 호출합니다. – Grandpa

0

의사 코드에서, 그 결과는 다음과 같습니다

synchronized (var) 
{ 
    var.wait(); 
    print(var); 
    var.notifyAll(); 
} 
0

난 당신이 각 스레드 코드를 편집 할 수 없습니다 가정합니다. 그래서 여기에있다

... 
final Thread[] Threads = ...; 
Thread aSuperThread = new Thread() { 
    public void run() { 
     for(Threads T : Threads) 
      T.run(); 
    } 
}; 
aSuperThread.start(); 
... 
1

joining 스레드를 시도 했습니까?

숙제이므로 더 많은 단서를 제공하지 않겠습니다.

7
thread1.start(); 
thread1.join(); 

thread2.start(); 
thread2.join(); 

... 

.join() 호출은 스레드가 완료되기 전에 완료 될 때까지 대기합니다.

+0

+1하지만 thread1/thread2 등이 아닌 루프를 원할 것입니다 :-) –

0

집행자에 대해 들었습니까?

// create ExecutorService to manage threads       
ExecutorService threadExecutor = Executors.newFixedThreadPool(3); 
threadExecutor.execute(task1); // start task1 
threadExecutor.execute(task2); // start task2 
threadExecutor.execute(task3); // start task3 

여기서 task1, task2 및 task3은 실행 가능한 인터페이스를 구현하는 개체입니다. Executors는 Java 5부터 사용할 수 있습니다. 자세한 정보 : http://www.deitel.com/articles/java_tutorials/20051126/JavaMultithreading_Tutorial_Part4.html