Bac*_*ria 11 java jsp transactions jdbc java-ee
我正在开发一个酒店预订网站.它是一个J2EE 1.4 Web应用程序,使用JSP和JDBC.
我有一种方法负责预订酒店房间.
booking()
Run Code Online (Sandbox Code Playgroud)
从这个方法我称其他四种方法
bookRooms()
makePayment()
confirmUserByMail()
confirmUserBySMS()
Run Code Online (Sandbox Code Playgroud)
我知道有两个用户可以尝试同时预订同一个房间,而在我目前的系统中,两个用户可能最终会使用同一个房间.
我应该如何处理事务以避免这种并发问题?
这可能是非常常见的情况,但我之前从未处理过这种情况,所以请指导我.
我确信有高级方法可以做到这一点,但我只会使用一个简单的布尔值 isFull 并在预订时使其变为 true。
boolean roomIsFull = false;
if (roomIsFull)
{
//Sir this room is already booked. Please Pick Another.
}
else
{
//Do your stuff.
roomIsFull = true;
}
Run Code Online (Sandbox Code Playgroud)
然后您仍然可以使用当前的代码。
为了确保一个房间只被预订一次,可以使用synchronized关键字来确保该方法只能使用一次(这不是最好的,因为不能同时预订两个不同的房间)
其他选项是使用 volatile 关键字,这样如果正在访问房间对象,其他方法就可以看到它。
资料来源:http ://www.vogella.com/tutorials/JavaConcurrency/article.html#concurrency_overview
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |