我有一个网络服务,可以将文件写入磁盘,并将其他内容写入数据库。每次写入整个操作需要 1-2 秒。
该服务可以同时从多个客户端调用,但不太可能。假设有 20 个客户端同时调用 web 服务,写入操作必须同步。在这种情况下,某些客户端可能会出现超时异常,因为它们必须等待很多秒。
有什么好的做法可以解决这些情况?就像现在一样,这些方法是同步的(这可能会导致饥饿/超时)。
我是否应该通过删除 synchronized
关键字让所有线程进入 write 方法并将它们的任务放入任务队列以避免超时?这是解决这个问题的正确方法吗?
最佳答案
删除 synchronized
并将其单独放入任务队列中对您没有帮助(因为这实际上是 synchronized 为您所做的)。但是,如果您将 Web 请求放入队列后立即对其进行响应,那么您将减少响应时间。但是以牺牲一些可靠性为代价,因为用户将得到工作已完成的确认,而工作实际上并没有完成(系统可能会在工作完成之前崩溃)。
关于java - 在 Java 中避免超时/饥饿的常见做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10380053/