Android提供了队列的支持:
http://developer.android.com/reference/java/util/Queue.html
public interface
Queue
implements Collection<E>| java.util.Queue<E> |
|
AbstractQueue<E>,
ArrayBlockingQueue<E>,
ArrayDeque<E>,
BlockingDeque<E>,
BlockingQueue<E>,
ConcurrentLinkedDeque<E>,
ConcurrentLinkedQueue<E>,
DelayQueue<E extends
Delayed>,
Deque<E>,
LinkedBlockingDeque<E>,
LinkedBlockingQueue<E>,
LinkedList<E>,
LinkedTransferQueue<E>,
PriorityBlockingQueue<E>,
PriorityQueue<E>,
SynchronousQueue<E>,
TransferQueue<E>
|
如果要实现阻塞,可以考虑用BlockingQueue的实现类,
A ConcurrentLinkedQueue is an appropriate choice when many threads will share access to a common collection.
使用ConcurrentLinkedQueue的一个例子:
- private static final Queue<Object> sWriteQueue =
- new ConcurrentLinkedQueue<Object>();
当要把某个元素入队时:
- private synchronized void write(Object o) {
- //当doWrite()正在进行过程中时,会把sIsWriting置为true
- //当要调用nextWrite()之前把sIsWriting置为false.
- if(sWriteQueue.isEmpty() && !sIsWriting) {
- doWrite(o);
- } else {
- sWriteQueue.add(o);
- }
- }
- private synchronized void nextWrite() {
- if(!sWriteQueue.isEmpty() && !sIsWriting) {
- doWrite(sWriteQueue.poll());
- }
- }
- 当需要处理其中一个元素时:
- @Override
- public void onCharacteristicWrite(BluetoothGatt gatt,
- BluetoothGattCharacteristic characteristic,
- int status) {
- Log.v(TAG, "onCharacteristicWrite: " + status);
- sIsWriting = false;
- nextWrite();
- }
另外,BlockingQueue会针对put(e)以及take(e)提供阻塞机制。
对于以上场景,没有必要阻塞。
本文介绍了Android中如何实现队列,特别是在多线程环境下,推荐使用`ConcurrentLinkedQueue`。通过示例展示了如何入队和处理队列元素,并指出在特定场景下,无需使用阻塞队列。
2399

被折叠的 条评论
为什么被折叠?



