我想使用Servlets(resteasy + Hibernate)实现预约队列。我的预约管理员 如下(当然简化)。Java静态同步vs BlockingQueue实现
public class AppoController{
public synchronized static int createAppoinment(AppObj app){
//get last app no
//insert new app with no+1
//return new app no
}
}
目前这种方法工作正常。但我已阅读有关BlockingQueue实现这似乎是正确的方式?做工精细的
定义:
如果我不使用同步的静态和一次多个约会发送多个请求具有相同的任命没有
但是,如果使用同步静态,约会与正确的顺序创建
我没有在这里使用任何线程,但我认为tomcat使用自己的线程来从用户的服务器http请求。 所以这是一个多线程的应用程序?
我用Google搜索它过去几天,但我得到的最接近的是Java/Android: Synchronized vs Queue implementation
什么,我需要澄清的是,
- 这是做到这一点的正确方法吗?
- 对我的场景使用同步静态vs BlockingQueue实现有什么优点和缺点。
任何你看起来相关的其他输入也是受欢迎的。谢谢。
我认为这并不重要,因为这两种方法都局限于单个JVM。如果您的服务受欢迎,那么单个tomcat实例将无法处理所有流量。但是如果你将服务部署到第二个独立的tomcat实例,两种方法都不能保证唯一的预约号码。因此解决这个问题的正确方法是让数据库生成预约号码。 –
+1提升缩放的影响。已经完全错过了那部分!只是一个简单的问题,是否有可能在同步静态方法中耗尽服务器线程,因为它们被阻塞(等待)?和阻塞队列相反,线程(生产者)永远不会被阻塞? – eric
是的,但它是(a)已弃用,(b)计划搬迁,和(c)绝对是你想要的最后一件事。只需同步您需要同步的内容,或者使用'java.util.concurrent.'中的某些内容' – EJP