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();
    }

Вывод:

T


Ответы (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(). Оставлю ответ для потомков. Закрыто

→ Ссылка