Zawieszający się wątek w Java

0

Witam,
mam problem z wielowątkowością w SwingWorkerze: otóż po wykonaniu kilku przejść w pętli roboczej wątek mi siada i nie chce ruszyć dalej. Oto moja funkcja robocza:

	private void computeStatus() {
		growHerbs();
		for(int i = 0; i < herbivoreList.size(); i++) { // w tym miejscu wykonuje tylko siedem przejść i się zacina
			if(herbivoreList.get(i).isAlive()) {
				herbivoreList.get(i).computeBehavior(lifeBoard); // czasożerna funkcja
			}
			else {
				lifeBoard.remove(herbivoreList.get(i));
				herbivoreList.remove(i);
				i--;
			}
		}
		for(int i = 0; i < carnivoreList.size(); i++) {
			if(carnivoreList.get(i).isAlive()) {
				carnivoreList.get(i).computeBehavior(lifeBoard);
			}
			else {
				lifeBoard.remove(carnivoreList.get(i));
				carnivoreList.remove(i);
				i--;
			}*/
		}
		publish(new ArrayList<Being>(lifeBoard));
	}

Mógłbym uzyskać odpowiedź co się dzieje z tym wątkiem? Czy java automatycznie zawiesza wątki, które zbyt długo trwają?

0

nie, java takich rzeczy nie czyni, jak "zawieszanie wątków" sama z siebie ;)

Raczej samodzielnie się gdzieś za-deadlock-owałeś ;) Trudno coś więcej powiedzieć na podstawie tego fragmentu, nie mam akurat weny na strzelanie w ciemno ;)

Za pomocą VisualVM rzuć sobie okiem na działający program - VisualVM wykrywa trywialniejsze deadlocki.

0

Mam podejrzenie, oparte na obserwacjach ze swojego programu, że wyjątek rzucony w metodzie wywołanej w doInBackground jest jakoś inaczej propagowany, nie trafia do domyślnego handlera. Toteż w tym przypadku zrób ciało metody computeStatus w bloku try{...}catch(Exceptrion e){e.printStacktrace();} . Zakładam, że na konsoli pojawi się jakiś wyjątek dotyczący przekroczenia indeksu tablicy.

0

chodnik - strzał w dziesiątkę. Wstawiłem try/catch i od razu posypały się java.lang.IndexOutOfBoundsException.
Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1