LinkedBlockingQueue 简单使用

本文详细介绍了Java并发包中LinkedBlockingQueue的实现原理与使用方法,包括其自定义长度、线程安全特性和如何通过put和take方法进行数据的存取。同时,文章还提供了具体的代码示例,展示了如何在实际项目中运用LinkedBlockingQueue来处理大量数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

简介:LinkedBlockingQueue 是线程安全的实现了先入先出等特性,其中主要用到put和take方法,put方法在队列满的时候会阻塞直到有队列成员被消费,take方法在队列空的时候会阻塞,直到有队列成员被放进来。

 
 

1.定义方式-->可自定义长度,不定义长度默认为Integer.MAX_VALUE:

(1) final static LinkedBlockingQueue<String> linkQueueOne = new LinkedBlockingQueue<String>();
(2) final static LinkedBlockingQueue<String> linkQueueTwo = new LinkedBlockingQueue<String>(1000);

2.使用:
@Log4j2
public class testLinkedBlockingQueue{
  @Autowired
  private TestService testService;
  public static AtomicInteger b = new AtomicInteger(0);
  public Object linkedBlockingQueue4Add(String arg1) throws Exception {
    //将值放入队列
  linkQueue.put(arg1);
  if(b.get()==0) {
     //相当于返回 ++i
  b.incrementAndGet();
     //处理队列中的数据
  dealQue();
   }
   return null;
  }


   //处理队列中的数据
  private void dealQue() throws InterruptedException {
     new Thread(new Runnable() {
   @Override
   public void run() {
  try {
   log.info("开始处理数据");
            //存放数据
   List<String> addList = new ArrayList<>();
         
           //1000条数据写一次数据库
    for (int i = 0; i < 1000 ; i++) {
     log.debug("加入个数:{}",i);
              //linkQueue.take 当队列中无数据是会阻塞,知道队列中有数据
     addList.add(linkQueue.take());
    }
           //写入数据库操作
    testService.test4BranchAdd(addList);
    log.info("结束处理数据,插入条数:{}",c);
    }catch (Exception e){
   log.info("处理数据异常",e);
  }finally {
           //处理完后将值设置为0
  b.set(0);
  }
   }}).start();
   }
}
AtomicInteger 使用方法见:https://www.cnblogs.com/scuwangjun/p/9098057.html




转载于:https://www.cnblogs.com/Mr-xt/p/10069270.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值