我有一个关于我们通常如何处理线程冲突的问题?例如,如果您在网站上销售一本书,但只有一本可用。情况是有2个客户(线程)想买那本书,碰巧两个客户同时下单,那我们怎么处理呢?我们如何避免它?
更具体地说,我有一个接收客户端请求的 servlet,我的意思是因为我们不能只创建 doPost 方法synchronized
,因为这可能会在每个请求(线程)进入时导致性能问题。
class Server{
private Library library = Library.getInstance(); //singleton for all books
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
synchronized(library){
Book book = library.get(request.getParameter("book_name"));
if(book != null){
int copies = book.getAvailable();
book.setAvailable(copies-1);
placeOrder();
}
}
}
}