哈希映射可以同时访问多个线程,因此它不是线程安全的。
但是在Hibernate中,会话工厂是线程安全的,但是如何同时访问多个线程并请求会话?
我对线程安全感到困惑。
这是我面临的面试问题之一。
答案 0 :(得分:0)
线程安全的概念很简单,当多个同时线程使用资源时,程序状态(字段/对象/变量)表现正常。该术语可以应用于代码,方法,类,库,应用程序等的一部分。这些范围的基本含义保持不变,但线程安全所需要的内容可能有很大差异。
制作线程安全的最简单方法是仅从单个线程访问状态。由于堆栈以及所有局部变量都在单个线程的范围内,因此不直接或间接访问对象字段并且仅访问局部变量的代码本质上是线程安全的。
Hibernate sessionFactory
SessionFactory通常只在startup.is线程安全时构建一次,这样许多线程可以同时访问它并为单个数据库请求编译映射的会话和不可变缓存。 SessionFactory通常只在启动时构建一次。
<强> HashMap中强>
如果多个线程同时访问哈希映射,并且至少有一个线程在结构上修改了映射,则必须在外部进行同步以避免内容的不一致视图。 (结构修改是添加或删除一个或多个映射的任何操作;仅更改与实例已包含的键关联的值不是结构修改。)
答案 1 :(得分:-2)
多个线程可以同时访问hashmap,这会导致问题。
例如,如果您尝试更新密钥的特定值,同时另一个线程尝试读取相同密钥的值。第二个线程将获得较旧的值。如果您尝试在外部同步hashmap以避免此类情况,则最终可能会阻止整个映射,这将影响应用程序的性能。而是ConcurrentHashmap确保减少锁定的粒度。因此在读/写期间只会阻塞几个键而不是整个映射