`
likebean
  • 浏览: 18194 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

应避免使用嵌套connection的场景,否则在高并发下将从出现死锁

 
阅读更多

例如如下的代码:

 

		HibernateCallback callBack = new HibernateCallback<List<? extends BaseEntity>>() {
			public List<? extends BaseEntity> doInHibernate(Session session) throws HibernateException, SQLException {
				Query query = session.createQuery(finalQueryStr);  			
    	List<BaseEntity> list = query.list();
				if (onAfterLoad && entityListenerController != null)
					entityListenerController.afterLoad(className, list);
				return list;
			}
		};

 

entityListenerController.afterLoad(className, list);

中使用又调用了另外的manager去执行查询,如此就形成了

ConnectionA open

ConnectionB open

ConnectionB close

ConnectionA close

的情形,这种使用方法在高并发下将导致因获取Connection而引发的死锁。

 

一种解决方法是加上只读事务@Transactional(readOnly = true)

以保证使用同一个Connection。

分享到:
评论

相关推荐

    微博支付-高并发场景下数据一致性问题探究.pdf

    在处理高并发时,Nginx能将请求分散到不同的服务器,减轻单台服务器的压力,但同时也需要处理分布式环境下的会话一致性,例如通过会话粘滞性(Session Stickiness)保持用户会话在一个特定服务器上,避免因服务器间...

    关于在类的构造函数和析构使用临界区函数导致的多线程死锁的一个经验之谈

    本文将讲述一个关于在类的构造函数和析构使用临界区函数导致的多线程死锁的经验之谈。 首先,让我们先了解什么是临界区函数。临界区函数是一种用于保护共享资源的机制,当多个线程访问同一个共享资源时,临界区函数...

    并发访问ORACLE数据库的数据死锁分析和解决措施.pdf

    在实际应用中,高并发访问数据库可能会导致数据死锁问题,本文将对数据死锁分析和解决措施进行详细介绍。 数据死锁的概念 在关系型数据库中,数据死锁是指多个事务在访问同一个资源时,相互等待对方释放资源,...

    操作系统银行家算法避免死锁

    银行家算法避免死锁 VM软件 Linux系统 C语言 成功编译 成功运行 内附完整课设报告,代码,运行cpp 附有哲学家进餐简略一题 原课设要求:死锁避免 (1)请设计一个程序...(5)要求在linux ubuntu环境下使用c/c++编写

    谈操作系统中死锁的避免

    通过合理地管理和分配资源,操作系统可以在多道程序环境下有效避免死锁问题。银行家算法提供了一个有效的框架,帮助操作系统动态地检查资源分配请求,并确保系统的安全性。此外,理解死锁的原理及其避免机制对于设计...

    银行家算法 死锁避免 源码

    统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。  要解释银行家算法,必须先解释操作系统安全状态和不...

    Java高并发视频教学,并带实战java高并发程序设计,高并发面试题目

    首先,"Java线程并发面试题87.pdf"很可能包含了87个关于Java并发的常见面试问题,这些问题涵盖了线程基础知识、同步机制、线程池、死锁避免与解决、并发集合类的使用等多个方面。例如,可能会讨论Java中如何实现线程...

    进程死锁避免银行家算法

    通过运行这个程序,你可以观察不同场景下的资源分配情况,理解如何有效地避免死锁。 总的来说,银行家算法是一种有效的死锁预防方法,通过提前规划和控制资源分配,可以保证系统的稳定性。在实际操作系统设计中,...

    操作系统实验2死锁的避免

    ### 死锁避免知识点 #### 实验背景与目标 本实验是关于操作系统的高级课程实践之一,主要聚焦于“死锁避免”的理论和技术实现。死锁是计算机科学领域中的一个重要问题,尤其在多进程环境中非常常见。当两个或多个...

    死锁避免——银行家算法

    这个程序主要通过模拟系统死锁避免的实现,使用银行家算法来避免死锁加深对死锁避免,系统安全状态等的理解。 (1)输入1执行算法,输入2退出程序,其他输入无效。算法要用到的资源种类有10种,每种资源的数目为1~10...

    银行家算法死锁的避免.doc

    【银行家算法】是操作系统中用于预防死锁的一种策略,由艾兹格·迪杰斯特拉提出。在银行家算法中,系统模拟银行贷款的过程来...通过这个实验,你将深入理解死锁的避免策略,并能够实际应用银行家算法解决资源分配问题。

    java的hashMap多线程并发情况下扩容产生的死锁问题解决.docx

    此外,引入了ConcurrentHashMap类,这是一个专门为多线程设计的高效容器,其内部使用分段锁策略,可以在并发环境下保证线程安全,避免了类似HashMap扩容引发的死锁问题。 如果你在多线程环境中使用HashMap并遇到...

    模拟银行家算法实现死锁避免

    死锁是指两个或多个并发进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉它们都将无法推进下去。模拟银行家算法的目标就是确保系统不会出现这种情况,通过一套安全策略来预防死锁的发生。 ...

    C++实现OS的银行家算法,避免死锁。比较初级

    "银行家算法的 C++ 实现" 银行家算法(Banker's ...总的来讲,银行家算法是一种重要的资源分配算法,在操作系统中广泛应用于避免死锁和饥饿的发生。通过 C++ 实现,我们可以更好地理解和掌握银行家算法的原理和实现。

    课程设计-模拟银行家算法避免死锁.doc

    在多道程序系统中,多个进程的并发执行可以提高系统的利用率和吞吐量,但是可能会发生死锁,导致进程无法继续执行。死锁是多个进程在运行过程中因争夺资源而造成的一种僵局。产生死锁的必要条件有互斥条件、请求和...

    操作系统实验报告--模拟死锁避免程序

    通过完成本实验,学生不仅能够加深对死锁避免的理解,还能掌握如何通过编程实现银行家算法,并能够在实际场景中灵活运用这一算法来确保系统的安全运行。此外,实验还涉及到了如何设计合理的输入输出接口以及如何有效...

    避免死锁的银行家算法

    在计算机操作系统中,死锁是多道程序设计环境下的一种严重问题,它指的是两个或多个并发进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉,它们都将无法推进下去。为了解决这一问题,Dijkstra...

    接触不到高并发场景咋办?如何获得高并发的经验?

    可以尝试使用JMeter、 Gatling等压力测试工具,模拟高并发场景,对个人开发的小项目进行压测,观察系统在高负载下的性能表现,找出瓶颈并优化。此外,参与开源项目或者在本地搭建高并发环境,如使用Hadoop、Spark等...

    实战Java高并发程序设计模式

    4. 并发设计模式:在高并发场景下,有一些常见的设计模式可以帮助我们编写高效、可维护的代码,例如生产者消费者模型、线程池、双端队列、缓存加载器、线程局部变量等。这些模式在Java并发编程中有着广泛的应用。 5...

Global site tag (gtag.js) - Google Analytics