почему CountDownLatch.getCount () возвращает long, но не int? - PullRequest
7 голосов
/ 08 августа 2011

Я посмотрел в коде, все int - параметр, переданный конструктору CountDownLatch, является int, переменная в Sync - int, тип возвращаемого значения Sync.getCount () - int. Но CountDownLatch.getCount () возвращает длинный? Хотите знать, почему.

Ответы [ 4 ]

3 голосов
/ 08 августа 2011

Я не знаю, найдете ли вы достаточный ответ на этот вопрос, если кто-то, кто разработал этот API, не отвечает, но он действительно говорит, что это для "отладки и тестирования".

public long getCount() {...} // just for debugging and testing
2 голосов
/ 29 сентября 2011

Futureproofing

То, что CountDownLatch (int) является единственным существующим конструктором, не означает, что вы не можете добавить CountDownLatch (long) в Java 8, если кто-нибудь когда-либо придумал использовать для такого рода вещи.

Значение только ориентировочное, но не надежное.

1 голос
/ 04 августа 2016

У меня другая идея: простой надзор.

Когда вы обратитесь к исходному коду, вы обнаружите, что реализация использует внутренний класс Sync.Sync также имеет getCount () - и тот возвращает int.Другими словами: вся реализация основана на int;и только то, что один внешний геттер использует долго.Я думаю, что в этом нет абсолютно никакого смысла.

1 голос
/ 30 сентября 2011

Я думаю, это потому, что int используется для хранения беззнакового int, считая от 0 до 2 ** 32-1.Хотя вы можете хранить беззнаковое целое в int, при выполнении вычислений с ним гораздо проще повысить значение до long, что вполне может вместить этот диапазон.

...