繁体   English   中英

Java线程正确的实现方式

[英]Java threading correct way of implementation

该项目的重点是每秒向数据库添加一个时间戳。

我需要的。

1. BackgroundTask用于将生成的时间戳添加到db。

2. BackgroundTask用于在服务器连接脱机时将数据添加到Buffer

3.将已保存的数据添加到数据库内部的缓冲区中,同时在应用程序运行时保存新的timestamps

我已经完成了第一部分和第二部分,但是在弄清楚第三部分时遇到了麻烦。

我有2个线程类,并且都实现Runnable

当服务器状态为肯定时, Thread A将数据添加到数据库。

当服务器状态为负时, Thread B创建一个Buffer并将数据存储在该Buffer

现在我需要Thread C ,它尝试每5秒连接到服务器,并且当它建立连接时, Thread B应该以某种方式将数据实现到数据库(按FIFO顺序)。

我在弄清楚如何处理线程以及实现其他功能的正确方式时遇到了麻烦,有人可以指导我如何实现以下功能吗?

如何使用BlockingQueue特别是LinkedBlockingQueue(FIFO)?

无论连接是否可用,线程A都会继续在队列中添加数据,线程B会尝试读取并提交给DB,因此如果队列中没有数据,线程B将阻塞并等待数据。

注意:如果要确保没有任务被拒绝,请进入无限制的阻塞队列。

我将使用两个线程来实现它,线程A每秒都会写入LinkedList ,这就是线程A所关心的; 和线程B连续从头读取( LinkedList.remove() )并尝试将其上载到数据库,这样,如果失败,您可以无限期重试直到成功,然后继续读取LinkedList的头。

但是,您必须牢记线程安全性。 话虽这么说,我认为将线程B设置为比线程A落后半秒就可以了,因为即使每次成功上传到数据库,线程B也永远不会领先于线程A。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM