Java 为什么CountDownLatch.getCount()返回一个long而不是int?
我查看了代码,所有内容都是int——传递给CountDownLatch构造函数的参数是int,同步中的变量是int,Sync.getCount()的返回类型是int。但是CountDownLatch.getCount()返回的是一个long?想知道为什么。我不知道你是否能找到这个问题的充分答案,除非设计该API的人回答,但它确实说这是为了“调试和测试” 未来证明 仅仅因为CountDownLatch(int)是唯一存在的构造函数,但这并不意味着如果有人想到使用这种方法,就不能在Java8中添加CountDownLatch(long)Java 为什么CountDownLatch.getCount()返回一个long而不是int?,java,java.util.concurrent,countdownlatch,Java,Java.util.concurrent,Countdownlatch,我查看了代码,所有内容都是int——传递给CountDownLatch构造函数的参数是int,同步中的变量是int,Sync.getCount()的返回类型是int。但是CountDownLatch.getCount()返回的是一个long?想知道为什么。我不知道你是否能找到这个问题的充分答案,除非设计该API的人回答,但它确实说这是为了“调试和测试” 未来证明 仅仅因为CountDownLatch(int)是唯一存在的构造函数,但这并不意味着如果有人想到使用这种方法,就不能在Java8中添加C
该值只是指示性的,无论如何都不可靠。我猜这是因为int用于存储一个无符号int,从0到2**32-1计数。虽然可以将无符号int存储在int中,但在使用它进行计算时,将值提升为long要容易得多,这可以很自然地适应该范围。我有一个不同的想法:简单的忽略
当您转到源代码时,您会发现实现使用了一个内部类Sync。Sync也有一个getCount(),它返回int;只有一个外部getter使用long。我认为这毫无意义。是的……在多线程环境中,这个值不可靠。我问这个问题只是想知道为什么使用长。。。谢谢谢谢,这解释了很多。
public long getCount() {...} // just for debugging and testing