Thread и цикл for
Вопрос,собственно, в следующем: Почему у меня цикл не по порядку, и почему ( как я понял ) каждая нить использует каждый i , и как это исправить? Ну и почему ошибка, размер массива = 10
private int i =0 ;
тут метод
for(;i<numbersCategory.size();i++) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(i + " ЭТА I");
Call<Partner> partnerCall = api.partnerId(Integer.parseInt(numbersCategory.get(i)));
partnerCall.enqueue(new Callback<Partner>() {
@Override
public void onResponse(Call<Partner> call, Response<Partner> response) {
System.out.println(" Загрузил");
partnerArrayList.add(response.body());
System.out.println();
System.out.println(response.body().getTitle());
System.out.println(partnerArrayList.size());
}
@Override
public void onFailure(Call<Partner> call, Throwable throwable) {
System.out.println(throwable);
}
});
}
}).start();
}
Вывод:
Ответы (1 шт):
Автор решения: Евгений Половинкин
→ Ссылка
Ответ: потому- что я глупенький, и не сочел, что .start(). находиться, когда цикл уже прошел одну ветвь. Если нужно,чтобы было все красиво надо сделать вот так:
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(i + " ЭТА I");
Call<Partner> partnerCall = api.partnerId(Integer.parseInt(numbersCategory.get(i)));
partnerCall.enqueue(new Callback<Partner>() {
@Override
public void onResponse(Call<Partner> call, Response<Partner> response) {
System.out.println(" Загрузил");
partnerArrayList.add(response.body());
System.out.println();
System.out.println(response.body().getTitle());
System.out.println(partnerArrayList.size());
}
@Override
public void onFailure(Call<Partner> call, Throwable throwable) {
System.out.println(throwable);
}
});
}
});
for(;i<numbersCategory.size();i++) {
thread1.run();
}
и в конце нужно run(), а не start(). Оставлю ответ для потомков. Закрыто
