【发布时间】:2014-08-11 17:55:16
【问题描述】:
我正在为 Android 创建一个媒体播放器应用。我有两个线程:一个产生音频帧,另一个使用这些帧。
我希望我的客户能够尝试使用不同大小的 ArrayBlockedQueue,从“无”缓冲(实际上是 1 个)到最多 10 个缓冲块。
我似乎在 Java 中找不到任何类提供与 ArrayBlockedQueue 类似的功能,但允许我动态地使项目列表更长/更短。
问题 1) 有谁知道功能类似于 ArrayBlockedQueue 的类,但允许我更改要持有的项目数量?
然后我有一个奇怪的想法:我可以捏造它吗?我可以创建一个具有新大小的新 ArrayBlockedQueue,并逐步复制当前在旧 ArrayBlockedQueue 中的 1-10 个项目并将它们放入新的 ArrayBlockedQueue,然后在旧的上存储指向新 ArrayBlockedQueue 的指针吗?
因为永远不会超过 10 个(或者我的缓冲区限制是多少),所以将项目复制到新数组不会花费太多时间。
问题 2)这是一种“合理”的方式来实现 ArrayBlockedQueue 实现,仍然给我灵活性?
问题 3)有没有更好的方法来解决这个问题?
-肯
【问题讨论】:
-
你不能查一下
remainingCapacity()并根据它添加吗? -
我使用队列的阻塞能力来协调我的两个线程的输入和输出。我非常希望保留任何未决的 put() 或 take() 调用适当的挂起。如果我理解你的建议 put() 不会挂起......它就不会完成。
标签: java android concurrency