ConcurrentLinkedQueue会定期清空吗?

时间:2017-06-22 07:59:30

标签: java queue

我的班级中有一个public class ArchiverData { /** The pricing API records */ private ConcurrentLinkedQueue<ArchiverApiResponseDTO> pricingQueue = new ConcurrentLinkedQueue<ArchiverApiResponseDTO>(); [...] public int getApiResponseCount() { return pricingQueue.size(); } public void addApiResponseDTO(ArchiverApiResponseDTO dto) { pricingQueue.add(dto); } public ArchiverApiResponseDTO pollApiResponseDTO() { return pricingQueue.poll(); } [...] } 字段,当我在Eclipse中使用JUnit运行简单的monothread测试时,我的行为非常不稳定。

我的课程:

public class ArchiverDataTest {
@Test
public void test() {
    ArchiverData archiverData = new ArchiverData();
    ArchiverApiResponseDTO dto = new ArchiverApiResponseDTO([...]);
    archiverData.addApiResponseDTO(dto);
    archiverData.addApiResponseDTO(dto);
    System.out.println(":" + archiverData.getApiResponseCount());
}
}

我的测试:

ArchiverApiResponseDTO

如您所见,测试用例中没有其他任何内容。 :2对象是一组简单的字段。

我的结果:

  • 运行测试::0(很好)
  • IDE中的逐步调试:archiverData.pricingQueueaddApiResponseDTO对象看起来总是空的
  • 第二次archiverData.pricingQueue来电时的断点::1为空;然后运行:sysout
  • archiverData.pricingQueue上的断点::0为空,然后运行::2

重要的是要注意一位同事每次都尝试相同并得到正确的结果(Python 2 & Python 3)!我没有在同一时间跑步。在给定时间的情况下,似乎某些东西正在排空我的队列。究竟发生了什么?

1 个答案:

答案 0 :(得分:0)

我现在最好的猜测是你在pollApiResponseDTO()或poll()上有一个监视器,它实际上是你的调试器清空队列。