to pytanie jest prawdopodobnie dość łatwo odpowiedzieć, ale po prostu nie rozumiem. Obniżyłem swój problem, dopóki ten mały fragment kodu nie został, aby znaleźć "pochodzenie" tego problemu: Próbuję wypełnić ArrayList of Threads pętlą.Java - Wypełnianie ArrayList of Threads pętlą
public static int u=0;
public void test(){
while (u <10) {
synchronized(threadList){
threadList.add(u, new Thread(){
@Override public void run(){
System.out.println("Thread at Index: " + u);
}
});
}
u++;
}
threadList.get(2).start();
}
W ostatniej linii chciałem przetestować powyższą pętlę, rozpoczynając wątek na indeksie "2". Spodziewam się, że konsola wyświetli "Thread at Index: 2", ale zamiast tego jest wyświetlana: "Thread at Index: 10" Bez względu na to, którą liczbę całkowitą piszę w ".get (int)" - metoda, I otrzymać indeks "10".
Dlaczego tak jest? I jak to naprawić?
Tworzenie wątków wydaje się działać ... więc jest liczbą całkowitą "u" problemu?
Doceniam każdą pomoc! Z góry dziękuję!
'u' jest statyczna, więc zawsze otrzymasz bieżącą wartość (' 10', gdy program działa). Nie zapisujesz wartości użytej podczas tworzenia nici w dowolnym miejscu. –
Jeśli na twoją listę wątków można uzyskać dostęp tylko z jednego wątku (głównego wątku?), Nie musisz synchronizować z użyciem tej listy. – Raedwald