Java 静态同步与阻塞队列实现
Java Static Synchronized vs BlockingQueue implementation
我正在尝试使用 Servlets (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 请求。
所以这是一个多线程应用程序?
过去几天我用谷歌搜索了它,但我得到的最接近的是 Java/Android: Synchronized vs Queue implementation
我需要澄清的是;
- 这是正确的方法吗?
- 在我的场景中使用同步静态与 BlockingQueue 实现的优缺点是什么。
也欢迎您提供您认为相关的任何其他意见。谢谢
您的实施确实有效。 synchronized 方法在任何时候只能由一个线程执行。 Tomcat 将使用多个线程(细节取决于当前设置,假设每个请求一个线程),因此每个并发请求都将获得自己的线程,然后所有请求都会等待此方法,直到允许其线程进入方法。
根据您的需要,我看到了两个选项。
- 如果约会来自数据库,让数据库或休眠处理 ID 生成。这会将多线程问题转移到旨在处理此类问题的数据库中。
- 如果约会不是来自数据库,而您只需要约会对象的唯一标识符,请使用 UUID,例如java.lang.UUID.randomUUID()
实际上,只有当您希望将约会的创建从 http 请求中移出时,使用队列才有意义。例如。如果您在请求完成后创建约会,例如夜间批处理作业或专用工作线程池。但这只有在创建约会的操作成本高昂时才有意义。
关于另一个主题,您应该检查此方法是否需要静态。
我正在尝试使用 Servlets (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 请求。 所以这是一个多线程应用程序?
过去几天我用谷歌搜索了它,但我得到的最接近的是 Java/Android: Synchronized vs Queue implementation
我需要澄清的是;
- 这是正确的方法吗?
- 在我的场景中使用同步静态与 BlockingQueue 实现的优缺点是什么。
也欢迎您提供您认为相关的任何其他意见。谢谢
您的实施确实有效。 synchronized 方法在任何时候只能由一个线程执行。 Tomcat 将使用多个线程(细节取决于当前设置,假设每个请求一个线程),因此每个并发请求都将获得自己的线程,然后所有请求都会等待此方法,直到允许其线程进入方法。
根据您的需要,我看到了两个选项。
- 如果约会来自数据库,让数据库或休眠处理 ID 生成。这会将多线程问题转移到旨在处理此类问题的数据库中。
- 如果约会不是来自数据库,而您只需要约会对象的唯一标识符,请使用 UUID,例如java.lang.UUID.randomUUID()
实际上,只有当您希望将约会的创建从 http 请求中移出时,使用队列才有意义。例如。如果您在请求完成后创建约会,例如夜间批处理作业或专用工作线程池。但这只有在创建约会的操作成本高昂时才有意义。
关于另一个主题,您应该检查此方法是否需要静态。