您当前的位置: 首页 >  Java

柳鲲鹏

暂无认证

  • 0浏览

    0关注

    4642博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

柳鲲鹏 发布时间:2018-07-01 16:10:34 ,浏览量:0

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

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

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

  数据队列LinkedBlockingDeque,缓存用ConcurrentLinkedQueue。

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

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

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

 

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

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

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

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

 

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

关注
打赏
1665724893
查看更多评论
立即登录/注册

微信扫码登录

0.0525s