【发布时间】:2017-11-28 20:46:50
【问题描述】:
默认情况下,Web 应用程序容器会为每个请求处理/创建一个单独的线程。在这种情况下
- Web 应用容器如何为每个请求创建一个线程。
-
假设 T1 和 T2 是或多或少同时运行的请求/线程,下面的语句将为每个线程/请求创建一个新对象。 哈希表 ht=新哈希表(); 即每个线程都将获得自己的哈希表实例。
t1 --> 将获得哈希表的实例/内存
t2 --> 将获得哈希表的实例/内存
因为,两个线程都没有共享...不确定为什么需要同步哈希表方法。
【问题讨论】:
-
这是一个过度同步的遗留类。使用
HashMap而不是Hashtable。 -
Hashtable 自 19 年前的 Java 1.2 以来基本上已经过时了。不要使用哈希表。它的 javadoc 说:从 Java 2 平台 v1.2 开始,这个类被改进为实现 Map 接口,使其成为 Java Collections Framework 的成员。与新的集合实现不同,Hashtable 是同步的。如果不需要线程安全的实现,建议使用 HashMap 代替 Hashtable。.
-
"不确定为什么需要同步哈希表方法。"您是在问为什么它们在哈希表类上同步,或者为什么您的代码在同步方法中访问它们?
-
我的问题是“为什么 Hashtable 类中的方法是同步的”。当对 Web 应用程序的每个线程/请求都获得自己的哈希表副本时 (new Hashtable()) .. 我发现不需要同步 Hashtable 方法。
-
仅仅因为它们是同步的并不意味着它们需要在您的特定情况下同步。它们是同步的,因为开发人员决定让 Hashtable 线程安全。
标签: java hashtable synchronized