`
Aga
  • 浏览: 218552 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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

阅读更多
同时有两个线程同时访问这个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();
		}
	}
分享到:
评论

相关推荐

    避免资源死锁!!!!

    资源死锁是数据库管理系统中常见的问题,特别是在多用户并发环境下,可能导致系统性能下降甚至完全停滞。资源死锁发生时,两个或多个事务互相等待对方释放所持有的资源,从而形成一个无法自行解决的循环等待状态。...

    oracle解决死锁![参考].pdf

    在数据库管理领域,死锁是常见且棘手的问题,特别是在大型企业级应用中,如Oracle数据库。死锁是指两个或多个事务在等待对方释放资源,从而导致事务无法继续执行的状态。处理Oracle数据库中的死锁问题是一项关键的...

    Java源码房门终于被打开了(解决死锁的方法).rar

    Java编程语言以其强大的功能和...通过阅读"说明.txt"和"房门终于被打开了(解决死锁的方法)"这两个文件,我们可以更深入地理解死锁的本质,学习如何在实际项目中避免和解决死锁,从而提高多线程程序的健壮性和效率。

    进程线程及死锁

    进程、线程、死锁和POSIX规范的系统调用 进程是操作系统中一个独立的执行单元,它拥有自己的虚拟地址空间和系统资源。线程是轻量级的进程,它共享同一个进程的虚拟地址空间和系统资源。理解进程和线程的概念对于...

    操作系统-死锁

    从进程同步的概念可以知道,当并发进程需要竞争使用资源或需要相互协作向前推进时,如果不采取同步措施,或同步措施不恰当,则很容易导致并发进程不能向前推进而陷入僵局,即死锁现象。死锁是发生在一组相互竞争或...

    SQL Server死锁的解除方法

    "SQL Server死锁的解除方法" SQL Server死锁是指在多个事务之间的资源竞争时,出现的循环等待资源的现象。死锁会导致系统性能下降,甚至会导致系统崩溃。因此,解决SQL Server死锁是非常重要的。 SQL Server死锁的...

    解决ORACLE死锁问题

    一、数据库死锁的现象 ... 二、死锁的原理 当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 ...通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台。

    sql数据库死锁查询工具

    - 长事务:长时间运行的事务可能导致更多资源被锁定,增加死锁风险。 **3. 查询阻塞进程** 当一个SQL查询被另一个正在执行的事务阻塞时,称为阻塞。阻塞可能导致查询延迟或完全停止,影响系统的正常运行。查询阻塞...

    sqlserver如何快速查询死锁语句

    在SQL Server数据库管理系统中,死锁是一个常见的性能问题,它发生在两个或多个事务相互等待对方释放资源,导致它们都无法继续执行。死锁不仅影响数据库的正常运行,还可能导致数据一致性问题。本文将详细介绍如何在...

    死锁详解,如何表面死锁

    死锁是多任务操作系统中可能出现的一种异常状态,当两个或多个进程互相等待对方释放资源而无法继续执行时,系统就陷入了死锁。死锁的四个必要条件包括: 1. **互斥条件**:某些资源一次只能被一个进程使用,即在一...

    这六个 MySQL 死锁案例,能让你理解死锁的原因!.doc

    MySQL 死锁案例详解 在 MySQL 中,死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象。死锁的产生原因是由于两个或两个以上的 Session 加锁的顺序不一致。解决死锁问题的关键就是让...

    mysql死锁的一些案例

    - 事务等待超时:MySQL的InnoDB存储引擎有死锁检测机制,当事务等待超过预设的超时时,会被自动回滚。 - 锁粒度不一致:行级锁与表级锁的混合使用可能导致死锁。 2. **死锁的检测与解决**: - InnoDB存储引擎...

    ORACLE表死锁的解决方法亲测有效!

    具体而言,当一个事务请求锁定一个资源时,如果该资源已经被另一个事务锁定,并且后者正在等待前者释放其占用的另一资源时,就形成了死锁。这种情况下,两个事务都在等待对方释放资源,从而陷入僵局。 ### 检测...

    DB2解决表死锁

    本文将深入探讨“DB2解决表死锁”这一主题,结合提供的资源“DB2解除表锁.doc”,我们将讨论死锁的基本概念、DB2中的死锁检测、死锁预防以及如何在遇到死锁时进行有效的解决。 首先,我们要理解什么是死锁。死锁是...

    数据库死锁-解决死锁问题的三种办法

    如果没有检测到死锁,事务将被放入等待队列;如果检测到死锁,DM4会视为运行时错误,回滚当前事务的执行语句,避免了死锁对系统的影响。这种机制简化了解锁过程,从用户角度来看,系统似乎不存在解锁的问题。 总之...

    orcale死锁查杀PB版

    Oracle数据库在运行过程中,由于多个事务间的资源竞争,可能会出现死锁现象,导致某些事务无法继续执行。"Oracle死锁查杀PB版"是专为解决这类问题而设计的工具,它提供了便捷的方法来检测和解除数据库中的死锁。本文...

    模拟死锁检测算法[死锁检测算法实现]

    "死锁检测算法实现" 在计算机科学中,死锁检测算法是一种重要的技术,用于检测系统中是否出现死锁现象。死锁是指两个或两个以上的进程在竞争资源时,导致系统无法继续执行下去的状态。死锁检测算法的主要任务是通过...

    一次死锁追踪经历

    文章中提到的现象是生产数据库晚上突然中断,连接被强制中止,这通常是死锁发生时的典型表现。系统取消了连续三个锁,并且大部分连接被Aborted,这表明数据库正试图通过取消事务来解除死锁状态。 【排查步骤】 1. ...

    死锁典型例题,对理解死锁的计算类题目有帮助

    死锁典型例题集锦 在操作系统原理中,死锁是一个非常重要的概念。死锁的出现可能会导致系统崩溃,因此了解死锁是非常必要的。本文总结了四个典型的死锁例题,旨在帮助读者更好地理解死锁的计算类题目。 例 1:死锁...

Global site tag (gtag.js) - Google Analytics