Я посмотрел в коде, все int - параметр, переданный конструктору CountDownLatch, является int, переменная в Sync - int, тип возвращаемого значения Sync.getCount () - int. Но CountDownLatch.getCount () возвращает длинный? Хотите знать, почему.
Я не знаю, найдете ли вы достаточный ответ на этот вопрос, если кто-то, кто разработал этот API, не отвечает, но он действительно говорит, что это для "отладки и тестирования".
public long getCount() {...} // just for debugging and testing
Futureproofing
То, что CountDownLatch (int) является единственным существующим конструктором, не означает, что вы не можете добавить CountDownLatch (long) в Java 8, если кто-нибудь когда-либо придумал использовать для такого рода вещи.
Значение только ориентировочное, но не надежное.
У меня другая идея: простой надзор.
Когда вы обратитесь к исходному коду, вы обнаружите, что реализация использует внутренний класс Sync.Sync также имеет getCount () - и тот возвращает int.Другими словами: вся реализация основана на int;и только то, что один внешний геттер использует долго.Я думаю, что в этом нет абсолютно никакого смысла.
Я думаю, это потому, что int используется для хранения беззнакового int, считая от 0 до 2 ** 32-1.Хотя вы можете хранить беззнаковое целое в int, при выполнении вычислений с ним гораздо проще повысить значение до long, что вполне может вместить этот диапазон.