Я использую структуру исполнителя для создания нескольких экземпляров объекта Fadder и печати результата. Я пытаюсь научиться использовать несколько потоков, чтобы выполнить задачу быстрее. Проблема, с которой я сталкиваюсь, заключается в том, что числа печатаются в случайном порядке каждый раз, когда я запускаю программу. Я думал, что создание нового объекта для каждой итерации цикла решит эту проблему, но он по-прежнему печатает число в «случайном» порядке. Могу ли я каким-либо образом гарантировать, что потоки печатаются в том порядке, в котором они должны запускаться? как 1,2,3,4,5. Спасибо
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;
— честно, пожалуйста, почитайте темы — все дело в том, что они могут делать что-то параллельно, каждая со своей скоростью. Если вы хотите печатать число в последовательном порядке, вам не следует использовать потоки. Использование потоков для этого не делает его быстрее. Если вычисление числа занимает много времени, то потоки могут иметь смысл, можно делать вычисления в отдельных потоках, собирать все результаты в коллекцию и потом их сортировать. - person Erwin Bolwidt   schedule 07.04.2017toString
, откуда вы знаете, в каком порядке они выполняются? - person user253751   schedule 07.04.2017