Java 为要插入到数据库中的数据实现队列
我们正在开发一个车辆跟踪系统,其中几个GPS设备使用TCP连接不断将其GPS位置发送到服务器。TCP通信器解码GPS位置并将该数据插入数据库。现在,TCP通信器的一个线程为一个设备请求提供服务。解码GPS数据后,它会创建到数据库的连接,插入数据并释放连接。 随着设备数量的增加,到数据库(MySQL)的并发连接数量也在增加。因此,我想实现一个队列,其中TCP communicator的每个线程将数据推送到一端,一个作业将从另一端获取数据并将其插入数据库 有人能给我建议处理这一切的最好办法吗?我们的应用程序基于Java,数据库是MySQL 谢谢,Java 为要插入到数据库中的数据实现队列,java,mysql,queue,Java,Mysql,Queue,我们正在开发一个车辆跟踪系统,其中几个GPS设备使用TCP连接不断将其GPS位置发送到服务器。TCP通信器解码GPS位置并将该数据插入数据库。现在,TCP通信器的一个线程为一个设备请求提供服务。解码GPS数据后,它会创建到数据库的连接,插入数据并释放连接。 随着设备数量的增加,到数据库(MySQL)的并发连接数量也在增加。因此,我想实现一个队列,其中TCP communicator的每个线程将数据推送到一端,一个作业将从另一端获取数据并将其插入数据库 有人能给我建议处理这一切的最好办法吗?我们的
Saurabh您需要实现一个消息队列
看一看或 您可以使用线程安全的队列实现,如对数据进行队列处理您只需创建一个简单的
线程
,即可处理数据库写入。然后让通信器线程将需要写入的数据排队。大概是这样的:
public class DatabaseQueue extends Thread {
private LinkedBlockingQueue<Data> queue = new LinkedBlockingQueue<Data>();
public void queueData(Data data) {
queue.add(data);
}
public void run() {
while (true) {
Data data = queue.take();
// write data to database
}
}
}
公共类数据库队列扩展线程{
私有LinkedBlockingQueue=新LinkedBlockingQueue();
公共无效队列数据(数据){
添加(数据);
}
公开募捐{
while(true){
Data=queue.take();
//将数据写入数据库
}
}
}
如果要对数据进行批处理,并且它支持简单的批处理技术(从而提高数据库插入性能),那么普通并发队列是最好的选择
但是,如果您还想做其他事情,则更灵活的方法是使用带有固定线程数的ExecutorService。通过这种方式,您可以在有限的并发性范围内添加任务来执行任何操作
一个作业将从另一端获取数据
并将其插入
数据库
ConcurrentLinkedQueue只是一个滥杀,它让多个线程访问无锁。poll
方法会占用不必要的睡眠时间,你还需要等待队列被填满,这又是另一种睡眠。
如果只有一个线程将内容放入队列,另一个线程将内容从队列中取出
Queue<GPRSObj> queue = Collections.synchronizedList(new LinkedList<GPRSObj>());
LinkedBlockingQueue