0 0

书上总说Hibernate的session是线程不安全的,有没有人给个例子,让我运行一下,更直观5

书上总说Hibernate的session是线程不安全的,有没有人给个例子,让我运行一下,更直观

我session设置为类变量
public class AThread extends Thread{
	private static Session session;
	
	static {
		Configuration cfg = new Configuration().configure();
		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
		SessionFactory sf = cfg.buildSessionFactory(serviceRegistry);
		session = sf.openSession();
	}
	
	public AThread(String threadname) {
		super(threadname);
	}
	
	@Override
	public void run() {
		String threadname = this.currentThread().getName();
		User user1 = new User();
		user1.setName("["+threadname+"]user1");
		User user2 = new User();
		user2.setName("["+threadname+"]user2");
		session.beginTransaction();
		session.save(user1);
		session.save(user2);
		session.delete(user1);
		session.delete(user2);
		session.getTransaction().commit();
		session.close();
	}
}

Main类
public class TestMultiThread {
	
	@Test
	public void test1() throws InterruptedException{
		AThread at = new AThread("at");
		AThread bt = new AThread("bt");
		at.start();
		bt.start();
		at.join();
		bt.join();
	}
}


这样每次执行的结果都报错不一样,请问这样是不是说名多个线程共用一个session?大家有没有好的例子来描述session的非线程安全,让我运行一下,这样也更直观
2013年1月30日 15:56

2个答案 按时间排序 按投票排序

0 0

你先把java的多线程研究明白了以上问题 迎刃而解,不然的话只是知其然不知其所以然 我推荐你一个视频  马士兵的j2se 里面有对java线程很详细的讲解,看完你就明白了,希望能帮到你,java线程很重要 是必会的技术,建议你看看视频 多写几个例子 慢慢就明白了

2013年1月31日 14:57
0 0

session说白了是一次会话:
1、A在1线程10:00 操作session插入数据
2、B在2线程10:01操作session回滚数据
3、A在1线程10:02操作session提交数据(此时session已经回滚,完蛋了)

即session应该只保证一个人使用。

2013年1月31日 08:45

相关推荐

    hibernate中session的管理

    总的来说,Hibernate中Session的管理是保证多线程环境下数据一致性的重要环节。ThreadLocal提供了一种有效且便捷的解决方案,但同时也需要注意其内存消耗和内存泄漏的风险,特别是在长生命周期的线程中。理解并选择...

    Hibernate-nosession

    总结来说,Hibernate-nosession是一种优化策略,它适合于那些对性能要求较高且不涉及复杂业务逻辑的场景。通过避免频繁打开和关闭Session,可以减少资源消耗,提高系统的响应速度。在实际开发中,我们需要根据项目...

    Hibernate_Session_Transaction

    1. **非线程安全**:由于`Session`不是线程安全的,因此在多线程环境中,每个线程都应有自己的`Session`实例,以避免数据存取的混乱。 2. **轻量级**:`Session`的创建和销毁相对快速,降低了资源的消耗。 3. **第一...

    org.hibernate.HibernateException: No Hibernate Session bound to thread

    Hibernate Session 绑定线程解决方案 在 Java web 开发中, Hibernate 是一个非常流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在使用 Hibernate 进行数据库操作时,...

    Hibernate的Session的javadoc

    Hibernate的Session接口是Java应用程序与Hibernate之间主要的运行时交互接口,它提供了对持久化对象的创建、读取和删除操作。Session的概念是基于对象的状态管理和数据库事务的,它的生命周期通常与一个物理事务绑定...

    day36 11-Hibernate中的事务:当前线程中的session

    总的来说,理解并正确使用“当前线程中的Session”是Hibernate开发中的重要一环。它可以帮助我们更高效、安全地处理数据库事务,确保数据的完整性和一致性。在实际项目中,根据应用的需求和环境选择合适的事务管理...

    Hibernate(session管理)

    SessionFactory是线程安全的,它是一个全局的单例对象,负责管理Session的生命周期。我们可以通过配置文件或者使用Annotation配置来初始化SessionFactory。 2. **打开和关闭Session**:在开始数据库操作前,我们...

    Hibernate Session释放模式

    在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session释放模式。本文将深入探讨Hibernate Session的几种释放模式,以及它们在实际开发中的应用和优缺点。 ...

    hibernate和session学习

    在Hibernate中,`SessionFactory`是核心组件之一,它是线程安全的,用于创建`Session`对象。`SessionFactory`通常在应用启动时创建一次,然后在整个应用生命周期中复用。创建`SessionFactory`需要通过读取Hibernate...

    hibernate的第一个例子

    **标题解析:**“hibernate的第一个例子”表明这是一个关于Hibernate框架的基础教程,主要目标是展示如何使用Hibernate进行数据持久化操作。 **描述分析:**描述提到这是一个超级简单的例子,包含一个持久化对象...

    对Hibernate Session做一个简单的包装

    5. **线程安全**:`Session`不是线程安全的,因此在多线程环境中,包装类可能需要考虑如何正确管理和关闭`Session`实例,避免并发问题。 6. **简化API**:根据项目需求,包装类可以提供一些简洁的API,比如`...

    hibernate session生命周期示例

    SessionFactory是一个线程安全的单例对象,它根据Hibernate配置文件生成。创建SessionFactory通常在应用程序启动时完成,而Session则在需要时创建。 2. **开始事务**: 在进行任何数据库操作之前,通常需要开启一...

    Hibernate 的第一个例子

    **Hibernate 是一个强大的Java持久化框架,用于管理数据库操作。它是ORM(对象关系映射)的一种实现,将数据库中的表映射为Java类,使得开发者可以以面向对象的方式来操作数据库。在本文中,我们将深入探讨如何创建...

    android hibernate demo例子

    在这个"android hibernate demo例子"中,开发者可能使用了一个特殊的方法或者第三方库来使Hibernate在Android上运行。 这个"OrmDemo"项目包含以下关键组件: 1. **实体类(Entity Classes)**:这些是与数据库表...

    hibernate登录小例子

    描述中提到每个步骤都有图片配合,这些图片可能是配置文件的截图、代码片段展示或者是运行结果的可视化,帮助初学者更直观地理解每个步骤的实现。 总结,"hibernate登录小例子"是一个很好的实践项目,它涵盖了...

    hibernate session.doc

    总的来说,`Session`在Hibernate中扮演着至关重要的角色,`delete()`方法是它实现对象持久化操作的一部分,正确理解和使用这些方法对于高效地操作数据库至关重要。理解`Session`的工作原理,以及与`SessionFactory`...

    重写hibernate的session简单增删改查

    在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系...总的来说,通过这个实践教程,初学者可以深入理解Hibernate的Session工作原理,学习如何自定义Session以适应项目需求,同时掌握基本的数据库操作。

    使用Hibernate的一个完整例子

    **使用Hibernate的一个完整例子** Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。在本教程中,我们将探讨如何在实际项目中使用Hibernate进行数据库操作,通过一个完整的...

    Hibernate_session_factory_配置.docx

    在Java的持久层框架Hibernate中,SessionFactory是核心组件之一,它是线程安全的,负责创建Session对象,每个Session对应于数据库的一次会话。配置SessionFactory主要是通过Hibernate的配置文件(通常为hibernate....

    hibernate框架相关的例子

    SessionFactory是Hibernate的核心组件,它是线程安全的,负责创建Session实例。Session是与数据库交互的接口,用于执行CRUD(Create、Read、Update、Delete)操作。在每次数据库操作前,我们都需要打开一个Session,...

Global site tag (gtag.js) - Google Analytics