hibernate多线程 *** 作数据库的一张表,如何避

hibernate多线程 *** 作数据库的一张表,如何避,第1张

多线程是很容易造成死锁,一般情况下死锁都是因为并发 *** 作引起的。我不懂JAVA,但死锁这个问题每种开发工具和数据库都会碰到.解决办法是:

1、程序方面优化算法(如有序资源分配法、银行算法等),在一个程序里,能不用多线程更新同一张数据库表 尽量不要用,如果要用,其避免死锁的算法就很复杂。

2、数据库方面设置等待超时时间

3、发生死锁后直接KILL掉数据库进程

ThreadLocal类是一个全局共享Map,里面用于存放每一个线程的唯一实例。

比如你放一个A类进去后,只要还是你这个线程来读取的话,那么这个A类还是你存进去的那个A。

而如果是别的线程来读则是读不到的,因为他的线程号和你是不同滴。

同理,如果你再放一个A类进去就会覆盖你以前存入的A类。

在你的程序中,你首先声明一个final的静态ThreadLocal,是为了让此ThreadLocal成为服务器中唯一的一个实例,然后在这个实例中进行 *** 作:

首先就是查找这个实例中是否存在session,用的是s.get()方法,如果你以前存过的话,会给你以前存储过的那个session。相反,如果你没有存过,那么他会将一个null值传递给你程序中的那个sssion。

这时来一个判断,如果是空,那么就将你程序中的session进行初始赋值,并将他放入到ThreadLocal中,以便于下次直接调用。

Hibernate工作原理是Configuration读取Hibernate的配置文件和映射文件中的信息,即加载配置文件和映射文件,并通过Hibernate配置文件生成一个多线程的SessionFactory对象

然后,多线程SessionFactory对象生成一个线程Session 对象;Session对象生成Query对象或者Transaction对象;可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate( )等方法对PO进行加载、保存、更新、删除等 *** 作。

在查询的情况下,可通过Session 对象生成一个Query对象,然后利用Query对象执行查询 *** 作;如果没有异常,Transaction对象将提交这些 *** 作结果到数据库中。

扩展资料:

Hibernate它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来 *** 纵数据库。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JaveEE架构中取代CMP,完成数据持久化的重任。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6883185.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-29
下一篇 2023-03-29

发表评论

登录后才能评论

评论列表(0条)

保存