I'm trying to implement an appointment queue using Servlets (resteasy + Hibernate). my appointment controller is as follows (simplified of course).
public class AppoController{
public synchronized static int createAppoinment(AppObj app){
//get last app no
//insert new app with no+1
//return new app no
}
}
currently this method works fine. but i've read about BlockingQueue implementations which seems the correct way?
Definition of working Fine:
if i dont use synchronized static and send multiple requests at once multiple appointments have same appointment no
but if i use synchronized static, appointments created with correct order
i dont use any threads here but i assume tomcat uses its own threads to server http requests from users. so this is a multithreaded app?
i have googled it for past few days but the closest i got is Java/Android: Synchronized vs Queue implementation
what i need to clarify are;
- is this the correct way to do this?
- what are the pros and cons of using synchronized static vs BlockingQueue implementation for my scenario.
Any other inputs you seem relevant are also welcome. Thanks.
Your implementation does work. The synchronized method can only be executed by one thread at any time. Tomcat will use multiple threads (the details depend on the current settings, lets assume one thread per request), so every concurrent request will get its own thread and then ever request waits on this methods until its thread is allowed to enter the method.
I see two options depending on your needs.
Actually using a Queue will only make sense if you want move the creation of the appointment out of the http request. E.g. if you create the appointment after the request finished like a nightly batch job or a dedicated worker thread pool. But this will only make sense if it is a expensive operation to create an appointment.
On a different topic, you should check if this method needs to be static.