8

コードを調べたところ、すべてが int です。CountDownLatch コンストラクターに渡されるパラメーターは int、Sync の変数は int、Sync.getCount() の戻り値の型は int です。しかし、CountDownLatch.getCount() は long を返しますか? なぜだろうか。

4

4 に答える 4

3

そのAPIを設計した人が答えない限り、その質問に対する十分な答えが見つかるかどうかはわかりませんが、「デバッグとテスト」のためであると言っています.

public long getCount() {...} // just for debugging and testing
于 2011-08-08T17:57:37.027 に答える
2

将来の保証?

CountDownLatch(int) が唯一の既存のコンストラクターであるからといって、Java 8 で CountDownLatch(long) を追加できなかったという意味ではありません。

いずれにせよ、この値は参考値であり、信頼できるものではありません。

于 2011-09-29T12:31:08.837 に答える
2

私は別の考えを持っています:単純な見落としです。

ソース コードに目を向けると、実装で内部クラス Sync が使用されていることがわかります。Sync にも getCount() があり、それは int を返します。つまり、実装全体が int に基づいています。その 1 つの外部ゲッターだけが long を使用しています。そこにはまったく意味がないと思います。

于 2016-08-04T11:03:43.000 に答える
1

0 から 2**32-1 までカウントする unsigned int を格納するために int が使用されているためだと思います。unsigned int を int に格納することはできますが、それを使用して計算を行う場合は、値を long に昇格させる方がはるかに簡単で、その範囲に非常に自然に対応できます。

于 2011-09-30T17:08:53.977 に答える