我正在编写一些单元测试代码,并且需要知道所有发布到干扰者的环形缓冲区的事件都被处理了(正如所说的,它只针对特定的测试用例)。
在研究了几个小时之后,没有找到任何优雅的解决方案,我决定在测试用例中使用以下代码:
while (ringBuffer.getBufferSize() > ringBuffer.remainingCapacity()) {
Thread.yield();
}这似乎很有效,但是由于getBufferSize()返回一个int,而remainingCapacity()返回一个long,所以我担心我忽略了一些东西。
有人知道为什么getBufferSize()返回int而remainingCapacity()返回long吗?这对我来说毫无意义,除非是个窃听器。
发布于 2015-08-31 15:30:20
注意:我不知道为什么作者不把它转换成整数。然而,我可以告诉你为什么它需要是long或者是一个向下的需要:
ringBuffer.remainingCapacity是一个long,因为它是基于bufferSize、减去produced和添加consumed计算的,如在MultiProducerSequencer中所示:
/**
* @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。因为consumed和produced都是long (而且需要这样做),由此产生的数学也将是long。
这只是我有根据的猜测,但我假设他们不会因为性能原因而返回int,返回long并没有实际的危害,但返回您拥有的类型要快一些,而不是强制对可能不需要的用户进行强制转换。
https://stackoverflow.com/questions/32314065
复制相似问题