java - 多个线程提交要按顺序完成的操作

标签 java multithreading servlets

关于在 Java 中使用线程的问题(免责声明 - 我对线程不是很有经验,所以请允许一些回旋余地)。

概述: 我想知道是否有一种方法可以让多个线程将要执行的操作添加到另一个线程将负责的队列中。什么顺序并不重要 - 更重要的是队列中的操作一次处理一个。

解释: 我计划托管一个小型服务器(使用 servlet)。我希望每个与客户端的连接都由一个单独的线程处理(到目前为止还可以)。但是,这些线程/客户端中的每一个都将对单个 xml 文件进行更改。但是,更改不能同时进行。

问题: 我可以让每个线程将要进行的更改提交到另一个线程将持续管理的队列吗?正如我所说,更改的顺序并不重要,只是它们不会同时发生。

此外,如果这不是最好的方法,请告知。

非常感谢。

最佳答案

这是一个合理的方法。使用无限制的 BlockingQueue(例如 LinkedBlockingQueue) - 对 XML 文件执行 IO 的线程调用队列上的 take 以删除下一条消息(如果队列为空则阻塞)然后处理消息以修改 XML 文件,同时提交更改到 XML 文件的线程将调用队列上的 offer 以便将消息添加到队列中。 BlockingQueue 是线程安全的,因此您的线程无需对其执行同步。

关于java - 多个线程提交要按顺序完成的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17631528/

相关文章:

java - 如何创建表示 Java long 的字符串,就好像它是无符号的 64 位值一样

java - 如何将 EclipseLink 对象导出到 XML

android - 当另一个线程中的语句失败时恢复 android 首选项的值

java - Servlet 中的 hibernate 导致 NoClassDefFoundError : org/slf4j/LoggerFactory

java - 单例和同步Servlet

java - 如何使用硬编码的 html 页面发送 servlet 响应?

java - 通用非静态方法的用例有哪些?

java - 在日期中添加天数

java - 为什么我们必须使用 "while"来检查竞争条件而不是 "if"

java - 另一个线程进入互斥体