Я считаю, что проблема, с которой я сталкиваюсь, - это вариант блокировки вложенного монитора.В основном у меня есть две группы потоков (не ThreadGroups, просто логические группы).Одна группа потоков (скажем, фоновая группа) будет ожидать объекта, пока другая группа потоков работает (рабочая группа).Один за другим рабочие потоки завершаются, пока, наконец, последний рабочий поток не окажется в методе complete.То, что я хочу сделать, - это выяснить, какой метод заставляет этот последний рабочий поток ждать, и затем вызывает notifyAll () для пробуждения всех фоновых потоков.Как вы, вероятно, можете догадаться, две группы потоков переключаются взад-вперед - одна группа работает, а другая ждет, а затем группы переключаются.Проблема в том, что если я уведомляю All () о текущих ожидающих потоках, то нет никакой гарантии, что последний рабочий поток перейдет к вызову wait () до завершения уведомленных потоков и попытается запустить следующий обмен.
Извините, если этот вопрос немного устарел - кажется, чем больше я работаю над параллелизмом, тем более запутанным становится мой код: (