这个项目的要点是每秒为数据库添加一个时间戳。
我需要什么。
1。 BackgroundTask,用于将生成的时间戳添加到db。
2。 BackgroundTask,用于在服务器连接脱机时向Buffer
添加数据。
3. 在数据库中添加保存到缓冲区的数据,同时在应用运行时保存新的timestamps
我已经完成了第一和第二部分,但很难搞清楚第三部分。
我有2个线程类,都实现了Runnable
。
当服务器状态为正时,Thread
A 会将数据添加到数据库。
当服务器状态为负时Thread
B 会创建Buffer
并将数据存储在那里。
现在我需要Thread
C ,它每5秒尝试连接一次服务器,当它建立连接时Thread
B 应该以某种方式将数据实现到数据库(以FIFO
顺序)。
我无法弄清楚如何处理线程以及实现更多功能的正确方法,有人可以告诉我如何实现以下功能吗?
答案 0 :(得分:2)
如何使用BlockingQueue,特别是LinkedBlockingQueue(FIFO)?
线程A将继续在队列中添加数据,无论连接是否可用,线程B将尝试读取并提交到DB,因此在队列中没有数据的情况下,线程B将阻塞并等待数据。
注意:如果要确保没有任何任务被拒绝,请选择无限制的阻止队列。
答案 1 :(得分:1)
我会使用两个线程来实现它,线程 A 会每秒写入LinkedList
,并且所有线程 A 都是关心;并且线程 B 从头部(LinkedList.remove()
)连续读取并尝试将其上传到数据库,这样如果失败,您可以无限期地重试,直到它成功,然后继续读取头部LinkedList。
但是,您必须牢记线程安全。话虽这么说,我认为你应该没问题,如果你只是设置线程 B 在线程 A 之后运行半秒,因为线程 B 永远不会领先线程 A ,即使每次上传到数据库都成功。