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,完成数据持久化的重任。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)