请问诸位,为什么会如此,有什么好的解决方法:
描述: 设备数据上传放入缓存队列,如下(1);同时从缓存队列中取数据并进行处理,如下(2,3).
问题: 设备实时数据上传速度快上传量大,而取数据,处理数据的能力比较慢,造成recordBuffer队列很快就满,(用了个clear),但最终现象,似乎程序一直在存数据清理数据(1),而没有处理数据(2,3).
1.public void setdata(data){
synchronized(recordBuffer)
{
if(recordBuffer.size()<maxBufferLength)
{ recordBuffer.addLast(data);
recordBuffer.notifyAll();
}
else
{ logger.debug("缓存不足");
// recordBuffer.clear();
}
}
}
2.public Data getdata(){
synchronized(recordBuffer)
{ while(recordBuffer.size()<1)
{ try
{
recordBuffer.wait();
} catch (InterruptedException e)
{
logger.error(e.getMessage());
}
}
return recordBuffer.removeFirst();
}
}
3.public void Deal{ //处理取得的设备数据,处理相对比较多慢
deal(getdata());
}
描述: 设备数据上传放入缓存队列,如下(1);同时从缓存队列中取数据并进行处理,如下(2,3).
问题: 设备实时数据上传速度快上传量大,而取数据,处理数据的能力比较慢,造成recordBuffer队列很快就满,(用了个clear),但最终现象,似乎程序一直在存数据清理数据(1),而没有处理数据(2,3).
1.public void setdata(data){
synchronized(recordBuffer)
{
if(recordBuffer.size()<maxBufferLength)
{ recordBuffer.addLast(data);
recordBuffer.notifyAll();
}
else
{ logger.debug("缓存不足");
// recordBuffer.clear();
}
}
}
2.public Data getdata(){
synchronized(recordBuffer)
{ while(recordBuffer.size()<1)
{ try
{
recordBuffer.wait();
} catch (InterruptedException e)
{
logger.error(e.getMessage());
}
}
return recordBuffer.removeFirst();
}
}
3.public void Deal{ //处理取得的设备数据,处理相对比较多慢
deal(getdata());
}
线程run()部分的方法就是:
run(){
Deal();
}