簡體   English   中英

Android:連續SQL插入的阻塞或非阻塞隊列?

[英]Android: blocking or non-blocking queue for continuous SQL inserts?

我有一個應用程序,在其中按下“開始”按鈕時,將啟動一項服務,該服務將輪詢幾個傳感器,並在傳感器值發生變化時將傳感器數據存儲到某個對象中。 每隔10毫秒,就會發生一次數據庫插入操作,該操作將獲取對象的當前值並將其存儲到數據庫中。 這發生了30分鍾

考慮到插入的速度和持續時間,我想在與UI線程不同的線程中運行此命令,以便導航不會受到影響。 因此,我的服務將通過將一些數據添加到隊列中來向線程提供一些數據,然后另一個線程(消費者)將從隊列中取出並插入數據庫中

當按下“停止”按鈕時,我需要確保在終止線程之前處理其余隊列。

在我看來,似乎到處都是針對生產者/消費者類型的情況建議使用某種阻塞隊列(例如, LinkedBlockingQueue與ConcurrentLinkedQueue ,或者LinkedBlockingQueue和ConcurrentLinkedQueue有什么區別?

我的問題是,在我的情況下,阻塞隊列是否有意義?

此應用程序中重要的事情是所有數據都已插入到數據庫中。 據我了解(如果我錯了,請糾正我),但是如果隊列已滿,並且使用者線程不能足夠快地進行插入以釋放更多的隊列空間,那么生產者就無法向其中添加內容。隊列? 如果這是正確的,那么在時間隊列中有可用空間,一些傳感器讀數將過去,並且由於阻塞,它們將不會插入數據庫中。

歸根結底,我只需要最好的方法來確保每10毫秒插入一次數據,而不會跳動。 在我看來,每10毫秒將值轉儲到一個無限制的無限隊列中是有意義的,並讓消費者盡快對其進行輪詢。 然后,當按下Stop鍵時,請先清空其余隊列,然后再終止線程。

那么在1個生產者/ 1個消費者的情況下處理此問題的正確方法是什么?

如果您是我,那么我將使用單個線程執行程序來執行此任務-它已經具有開箱即用所需的確切功能。 更多信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM