인사말,연속 스레드
나는 다음과 같은 작업을 해결하기 위해 노력하고있어. 예를 들어 그들 각각의 출력은 다음과 같은 순서로 번호입니다해야합니다
스레드 1 스레드 2 ... 스레드 N
어떻게 등, 플래그없이 (/ 대기 통지하고 동기화 방법만을 사용하여이 작업을 수행 할)?
P. 불쌍한 내 영어 : 죄송합니다
인사말,연속 스레드
나는 다음과 같은 작업을 해결하기 위해 노력하고있어. 예를 들어 그들 각각의 출력은 다음과 같은 순서로 번호입니다해야합니다
스레드 1 스레드 2 ... 스레드 N
어떻게 등, 플래그없이 (/ 대기 통지하고 동기화 방법만을 사용하여이 작업을 수행 할)?
P. 불쌍한 내 영어 : 죄송합니다
방법에 대해 : 동시 실행이 필요하지 않은 경우
thread1.run();
thread2.run();
thread3.run();
새로운 스레드가 필요하지 않습니다. 단일 스레드는 스레드의 본문을 연속적으로 실행할 수 있습니다.
이 간단한 접근 방식이 효과가 없다면 (즉, 숙제에 대한 교사의 기대치를 충족시키는 경우) 문제의 문제를 명확히하십시오.
의사 코드에서, 그 결과는 다음과 같습니다
synchronized (var)
{
var.wait();
print(var);
var.notifyAll();
}
난 당신이 각 스레드 코드를 편집 할 수 없습니다 가정합니다. 그래서 여기에있다
...
final Thread[] Threads = ...;
Thread aSuperThread = new Thread() {
public void run() {
for(Threads T : Threads)
T.run();
}
};
aSuperThread.start();
...
joining 스레드를 시도 했습니까?
숙제이므로 더 많은 단서를 제공하지 않겠습니다.
thread1.start();
thread1.join();
thread2.start();
thread2.join();
...
.join() 호출은 스레드가 완료되기 전에 완료 될 때까지 대기합니다.
+1하지만 thread1/thread2 등이 아닌 루프를 원할 것입니다 :-) –
집행자에 대해 들었습니까?
// 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
숙제 문제가 있습니까? 그렇지 않다면 왜 이것을 사용하여 스레드를 사용하고 싶습니까? –
println은 동시에 사용하면 훨씬 빠릅니다 :) ... 숙제 같은 것 같습니다. – Esko
은 라운드 로빈 스케줄러를 구현하려는 것 같습니다. –