您的位置:首页 > 其它

电脑慢的解决方法<二>

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

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐