为什么CountDownLatch.getCount()返回的是long而不是int?

8

我查看了代码,所有的内容都是int类型--传递给CountDownLatch构造函数的参数是int类型,在Sync中的变量也是int类型,并且Sync.getCount()方法的返回类型也是int类型。但是CountDownLatch.getCount()方法却返回long类型?不知道为什么。

4个回答

3

我有一个不同的想法:简单的疏忽。

当你查看源代码时,你会发现实现使用了一个内部类Sync。Sync也有一个getCount()方法——但它返回int类型。换句话说,整个实现都基于int类型;只有那一个外部的getter使用了long类型。我认为这毫无意义。


3

我不确定除非设计该API的人回答,否则你是否能找到足够的答案,但它确实说是用于“调试和测试”。

public long getCount() {...} // just for debugging and testing

是的,在多线程环境中,这个值是不可靠的。我提出这个问题只是想知道为什么要使用 long...谢谢! - DeepNightTwo

2

未来保障?

仅仅因为 CountDownLatch(int) 是唯一存在的构造函数,并不意味着在 Java 8 中不能添加 CountDownLatch(long) ,如果有人能够想出这种用途的话。

该值只是指示性的,无法可靠地使用。


1
我猜测这是因为int被用来存储一个无符号整数,从0计数到2 ** 32-1。虽然你可以将无符号整数存储在int中,但在进行计算时,将值提升为long会更容易,因为它可以自然地容纳该范围。

谢谢,这解释了很多问题。 - DeepNightTwo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接