Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:连续SQL插入的阻塞队列还是非阻塞队列?_Java_Android_Multithreading_Queue_Blockingqueue - Fatal编程技术网

Java Android:连续SQL插入的阻塞队列还是非阻塞队列?

Java Android:连续SQL插入的阻塞队列还是非阻塞队列?,java,android,multithreading,queue,blockingqueue,Java,Android,Multithreading,Queue,Blockingqueue,我有一个应用程序,当按下开始按钮时,一个服务将开始轮询几个传感器,并在传感器值发生变化时将传感器数据存储到某个对象中。每隔10毫秒,就会发生一次数据库插入,它将对象的当前值存储到数据库中。这种情况持续30分钟 考虑到插入的速度和持续时间,我想在UI线程之外的单独线程中运行它,这样导航就不会受到影响。因此,我的服务将通过将数据添加到队列来向线程提供一些数据,然后另一个线程(使用者)将从队列中获取数据并插入数据库 当按下停止按钮时,我需要确保在终止线程之前处理队列的其余部分 似乎在我所看到的每一个地

我有一个应用程序,当按下开始按钮时,一个服务将开始轮询几个传感器,并在传感器值发生变化时将传感器数据存储到某个对象中。每隔10毫秒,就会发生一次数据库插入,它将对象的当前值存储到数据库中。这种情况持续30分钟

考虑到插入的速度和持续时间,我想在UI线程之外的单独线程中运行它,这样导航就不会受到影响。因此,我的服务将通过将数据添加到队列来向线程提供一些数据,然后另一个线程(使用者)将从队列中获取数据并插入数据库

当按下停止按钮时,我需要确保在终止线程之前处理队列的其余部分

似乎在我所看到的每一个地方,都建议在生产者/消费者类型的情况下使用某种阻塞队列(例如,或)

我的问题是,阻塞队列在我的情况下有意义吗

此应用程序中最重要的一点是将所有数据插入数据库。据我所知(如果我错了,请纠正我),但是如果队列已满,并且使用者线程不能足够快地进行插入以释放更多队列空间,那么生产者将被阻止向队列添加内容?如果这是正确的,那么当队列有空闲空间时,一些传感器读数就会过去,并且由于阻塞,它们不会被插入数据库

在一天结束时,我只需要最好的方法来确保每10毫秒插入一次数据,而不会跳过一个节拍。在我看来,每隔10毫秒将值转储到一个无限的队列中,并让消费者尽可能快地对其进行轮询是有意义的。然后,当按下Stop键时,在终止线程之前排空队列的其余部分


那么,在1生产者/1消费者的情况下,正确的处理方法是什么呢?

如果我是你,我会使用一个单线程执行器来完成这项任务-它已经提供了你需要的现成功能。更多信息