Почему-то вывод такой:
public void msgNeedParts() {
// Blabla...
System.out.println(name + ": Try to print 'tasks'...");
synchronized(tasks) {
System.out.println(name + ": Tasks--" + tasks);
System.out.println(name + ": Did I manage to print it?");
tasks.add(new BinToDump(feeder, binNum));
}
stateChanged();
}
Просто распечатывает «GantryAgent: попробуйте напечатать« задачи »...», но не любое из следующих сообщений. Я предполагаю, что поток каким-то образом «застревает» при попытке получить доступ к синхронизированному списку «задач», но я не знаю, почему это происходит.
'задачи' были объявлены и инициализированы следующим образом:
private List<BinToDump> tasks =
Collections.synchronizedList(new ArrayList<BinToDump>());
Кто-нибудь может указать, что мне не хватает?
Ах! Я подозреваю, что у меня может быть виновник:
/* If nothing left to do, return to original position. */
synchronized (tasks) {
if (tasks.isEmpty()) {
doReturnToOriginalPos();
}
}
В моем планировщике (это дизайн агента) я проверяю, пустые ли «задачи», затем вызываю doReturnToOriginalPos (). Может быть, это происходит так быстро, что другие методы не могут изменить его?
Это была действительно проблема! В моем планировщике он вызывался так быстро, что ничто другое не могло получить доступ к «задачам». Спасибо всем за помощь!