0
나는 Executor 프레임 워크를 사용하여 Fadder 객체의 여러 인스턴스를 만들고 그 결과를 인쇄하고 있습니다. 여러 스레드를 사용하여 작업을 더 빠르게 수행하는 방법을 배우려고합니다. 내가 가지고있는 문제는 프로그램을 실행할 때마다 숫자가 무작위로 인쇄된다는 것입니다. 루프의 각 반복마다 새로운 객체를 만드는 것이 문제를 해결할 것이라고 생각했지만 숫자는 여전히 "임의"순서로 인쇄됩니다. 스레드가 실행되는 순서대로 인쇄되도록 보장 할 수있는 방법이 있습니까? 1,2,3,4,5와 비슷합니다. 감사합니다Executor를 사용하는 스레드 풀 Framrwork
package fadder;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Fadder {
private final int n;
Fadder(int n){
//initialize Fadder
this.n = n;
}
Fadder add(int m){
//create new Fadder
return new Fadder(n+m);
}
public static void main(String[] args) {
int threadnum = Runtime.getRuntime().availableProcessors();
ExecutorService executor = Executors.newFixedThreadPool(threadnum);
Fadder MyAdder = new Fadder(1);
for (int i = 0; i < 5; i+=1) {
int index = i;
//lambda function to print Fadder
executor.submit(() -> {
System.out.println(String.valueOf(MyAdder.add(index)));
});
}
executor.shutdown();
}
}
예 : INT threadnum = 1 '에 첫 번째 줄을 변경,'- 정직, 스레드에 읽어주십시오 - 요점들이 병렬로 일을 할 수 있다는 것입니다, 자신의 속도로 각각. 숫자를 순차적으로 인쇄하려면 스레드를 사용해서는 안됩니다. 이것에 쓰레드를 사용한다고해서 더 빠르지는 않습니다. 수를 계산하는 데 많은 시간이 걸리는 경우 스레드를 이해할 수 있습니다. 별도의 스레드에서 계산을 수행하고 모든 결과를 컬렉션으로 수집 한 다음이를 정렬 할 수 있습니다. –
Fadder에는'toString' 메서드가 없습니다. 어떻게 순서를 알 수 있습니까? – immibis
감사합니다. Erwin, threadnum = 1에 대해 알고있었습니다. 그러나 이것은 제가 더 큰 프로그램을 원했던 방식대로 작동시킬 수 있는지를보기위한 테스트였습니다. – Art