首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么RingBuffer的getBufferSize()是int,而remainingCapacity()是长的呢?

为什么RingBuffer的getBufferSize()是int,而remainingCapacity()是长的呢?
EN

Stack Overflow用户
提问于 2015-08-31 14:50:39
回答 1查看 125关注 0票数 2

我正在编写一些单元测试代码,并且需要知道所有发布到干扰者的环形缓冲区的事件都被处理了(正如所说的,它只针对特定的测试用例)。

在研究了几个小时之后,没有找到任何优雅的解决方案,我决定在测试用例中使用以下代码:

代码语言:javascript
复制
while (ringBuffer.getBufferSize() > ringBuffer.remainingCapacity()) {
    Thread.yield();
}

这似乎很有效,但是由于getBufferSize()返回一个int,而remainingCapacity()返回一个long,所以我担心我忽略了一些东西。

有人知道为什么getBufferSize()返回intremainingCapacity()返回long吗?这对我来说毫无意义,除非是个窃听器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-31 15:30:20

注意:我不知道为什么作者不把它转换成整数。然而,我可以告诉你为什么它需要是long或者是一个向下的需要:

ringBuffer.remainingCapacity是一个long,因为它是基于bufferSize、减去produced和添加consumed计算的,如在MultiProducerSequencer中所示:

代码语言:javascript
复制
/**
 * @see Sequencer#remainingCapacity()
 */
@Override
public long remainingCapacity()
{
    long consumed = Util.getMinimumSequence(gatingSequences, cursor.get());
    long produced = cursor.get();
    return getBufferSize() - (produced - consumed);
}

getBufferSize an int。因为consumedproduced都是long (而且需要这样做),由此产生的数学也将是long

这只是我有根据的猜测,但我假设他们不会因为性能原因而返回int,返回long并没有实际的危害,但返回您拥有的类型要快一些,而不是强制对可能不需要的用户进行强制转换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32314065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档