哈哈,终于被我搞成死锁了!

同时有两个线程同时访问这个servlet会导致一些问题:
第一个线程等待第二个的notify
而因为事物级别的提升导致第二个线程等待第一个线程的结束。
最终导致:死锁

[code]
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

try {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection("jdbc:mysql://localhost/hibernate", "root", "19841230");
c.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
c.setAutoCommit(false);
Statement stmt = c.createStatement();
ResultSet rs = stmt.executeQuery("select student.STUDENT_NAME " +
"from student where student.STUDENT_NAME='FrenchMan' ");
if(!rs.next()){
synchronized(lock){
if(i++%2==0){
lock.wait();
} else {
lock.notify();
}
stmt.execute("insert into student(student_name) values('FrenchMan')");
}
}
c.commit();
rs.close();
stmt.close();
c.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值