一例JAVA多线程访问卡死的现象

  最近适配摄像头,自然的就要接收、传递音频视频数据。而这些数据是非常频繁的,如果每次都新建缓冲区,一个是影响性能,另外也显得自己水平太低。怎么办?上缓存。

  音频、视频当然要分开缓存。代码很类似,自然的吾就新建了一个类,

  起名?Manager显然不合适,叫Worker最好。Queue、Cache都不是太适合。

  数据队列LinkedBlockingDeque,缓存用ConcurrentLinkedQueue。

  派发数据,当然要用线程。否则一阻塞就误事了。

  收到数据后,先在缓存中查找,找到合适的就从缓存中删除;没有合适的新建。之后将数据复制后放入数据队列中。

  派发线程使用队列取数据时(当然也可以使用休眠办法),有数据就派发,派发结束后加入缓存。

 

  上述步骤显然也是轻车熟路了。然后就发现,过一会就卡死。这是怎么回事?经过检查原因是:

  音频每次缓冲区大小一样,所以数量有限即可解决。

  视频每次都不一样,于是新建了大量缓冲区。队列中人满为患了。

  试的结果,还是不行,会卡死。

 

  又想了其他办法。包括开始就新建好,,使用ThreadLocal,结果都不行。怎么办?暂时没办法

你可能感兴趣的:(Android)