有没有一种办法用条件控制BlockingQueue获取元素?

THEBEST 2015-08-15 09:25:10
比如我希望某个值小于100的时候才能从BlockingQueue队列中take元素,而不是里面有元素就能取出来。但我不能一直循环判断,相当于如果大于100的时候要一直等待,直到小于100才能执行take
...全文
151 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonylovexl 2015-08-17
  • 打赏
  • 举报
回复
你们都答非所问啊 LZ的意思是 队列中的值大于100的时候才取出来,如果不是则一直阻塞。。。 话说,如果大于100一直阻塞,那上面时候才能拿出来呢? 你会动态的去修改队列中的值??
中华雪碧 2015-08-16
  • 打赏
  • 举报
回复

private BlockingQueue<Object> todoList = new LinkedBlockingDeque<Object>();

synchronized (todoList ) {
    if(todoList .size>100){
            todoList .take();
      }
}
问题的逻辑好像有问题。大于100时等待,然后队列只会越来越来大吧?就这样一直等待?除非你有其他的处理。可能的逻辑是大于100才take(),否则等待。
冰心的小屋 2015-08-15
  • 打赏
  • 举报
回复
没必要一直循环等待吧,定制个策略 1 比如队列个数超过某个峰值时才进行提取 2 或者定个时间戳每几分钟扫一次 3 你可以利用开源项目 quartz 启动一些定时任务 4 你也可以单独的去新建一个线程:)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧