java - 在 Java 中避免超时/饥饿的常见做法?

标签 java multithreading synchronization queue

我有一个网络服务,可以将文件写入磁盘,并将其他内容写入数据库。每次写入整个操作需要 1-2 秒。

该服务可以同时从多个客户端调用,但不太可能。假设有 20 个客户端同时调用 web 服务,写入操作必须同步。在这种情况下,某些客户端可能会出现超时异常,因为它们必须等待很多秒。

有什么好的做法可以解决这些情况?就像现在一样,这些方法是同步的(这可能会导致饥饿/超时)。

我是否应该通过删除 synchronized 关键字让所有线程进入 write 方法并将它们的任务放入任务队列以避免超时?这是解决这个问题的正确方法吗?

最佳答案

删除 synchronized 并将其单独放入任务队列中对您没有帮助(因为这实际上是 synchronized 为您所做的)。但是,如果您将 Web 请求放入队列后立即对其进行响应,那么您将减少响应时间。但是以牺牲一些可靠性为代价,因为用户将得到工作已完成的确认,而工作实际上并没有完成(系统可能会在工作完成之前崩溃)。

关于java - 在 Java 中避免超时/饥饿的常见做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10380053/

相关文章:

java - Google Cloud Vision 客户端 API - Java - 异常 : Failed computing credential metadata

javascript在后台执行函数

multithreading - 软件线程是否包括用户线程?

sql - 在 Oracle 中保持表同步

c# - SQLite & C# ] 如何控制编辑数据库文件的人数?

java - 部署程序集配置不适用于 mvn 包

java - J2ME Https 连接不工作

c++ - 每次调用工作负载非常低的连续并行计算

java - 我是否需要同时同步方法和对象

java - 运行测试时在其他模块中搜索资源文件