Java Queue的奇怪阻塞问题

在实际项目中,出现了一个关于queue的奇怪问题

程序逻辑:声明了一个Queue对象,暴露出restful接口,可调用接口内部执行queue.offer()存入元素

有定时任务,定时调用queue.poll()取出5000个元素,写入本地文件

有问题的代码段,没有放源代码就是表述大概意思

Set set = new HashSet();

for(int i=0;i<5000;i++){

       Object o = queue.poll();

       if(0!=null){

            set.add(o);

        }

}

//下面就是把set集合写成文件

出现问题:在服务器上部署后,set集合每次都不足5000元素,诊断为queue.poll()无法取出对象。

但下一次执行定时任务时,又能取出几百个元素。

根据日志显示,两次定时任务应该没有存在交叉,并发的情况,但接口是会被一直调用存入元素。

将poll()、offer()两方法自己封装加同步锁后,该问题不出现了。

各位大神,帮忙讲讲其中道理,看现象并不存在两个线程同时取队列中元素,为什么会发生阻塞,一直没有想明白

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值