我尝试使用Servlet实现预约队列(resteasy + Hibernate)。 我的预约管理员如下(当然简化)。
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
我需要澄清的是:
- 这是正确的方法吗?
- 在我的场景中使用synchronized static vs BlockingQueue实现的优点和缺点是什么。
我们也欢迎您认为相关的任何其他输入。感谢。
答案 0 :(得分:0)
您的实施确实有效。 synchronized方法只能由一个线程随时执行。 Tomcat将使用多个线程(详细信息取决于当前设置,假设每个请求一个线程),因此每个并发请求将获得自己的线程,然后请求等待此方法,直到允许其线程进入方法。 / p>
根据您的需要,我会看到两个选项。
实际上,如果要将约会的创建移出http请求,则只有使用队列才有意义。例如。如果您在请求完成后创建约会,如夜间批处理作业或专用工作线程池。但是,如果创建预约是一项昂贵的操作,这只会有意义。
在另一个主题上,您应该检查此方法是否需要是静态的。