Android中队列的实现

本文介绍了Android中如何实现队列,特别是在多线程环境下,推荐使用`ConcurrentLinkedQueue`。通过示例展示了如何入队和处理队列元素,并指出在特定场景下,无需使用阻塞队列。
部署运行你感兴趣的模型镜像

Android提供了队列的支持:

http://developer.android.com/reference/java/util/Queue.html

public interface

Queue

implements  Collection<E>

如果要实现阻塞,可以考虑用BlockingQueue的实现类,

ConcurrentLinkedQueue is an appropriate choice when many threads will share access to a common collection.

使用ConcurrentLinkedQueue的一个例子:

  1. private static final Queue<Object> sWriteQueue =   
  2.     new ConcurrentLinkedQueue<Object>(); 

    当要把某个元素入队时:

  1. private synchronized void write(Object o) {  
  2.     //当doWrite()正在进行过程中时,会把sIsWriting置为true
  3.     //当要调用nextWrite()之前把sIsWriting置为false.
  4.     if(sWriteQueue.isEmpty() && !sIsWriting) {  
  5.         doWrite(o);  
  6.     } else {  
  7.         sWriteQueue.add(o);  
  8.     }  
  9. }  
  10.   
  11. private synchronized void nextWrite() {  
  12.     if(!sWriteQueue.isEmpty() && !sIsWriting) {  
  13.         doWrite(sWriteQueue.poll());  
  14.     }  
  15. }
  1. 当需要处理其中一个元素时:
  2.     @Override  
  3.     public void onCharacteristicWrite(BluetoothGatt gatt,   
  4.         BluetoothGattCharacteristic characteristic,   
  5.         int status) {  
  6.         Log.v(TAG, "onCharacteristicWrite: " + status);  
  7.         sIsWriting = false;  
  8.         nextWrite();  
  9.     } 
另外,也可以自己维护一个队列,然后,使用wait()和notify()的方式实现类似的效果,但我感觉这样不太好,因为Java有现成的方案,算法方面也做了优化,应该使用 ConcurrentLinkedQueue更好。

另外,BlockingQueue会针对put(e)以及take(e)提供阻塞机制。

对于以上场景,没有必要阻塞。




您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值