java - 在单线程环境中使用Hashtable等线程安全集合类有什么缺点吗?

标签 java multithreading collections hashtable

面试官问我在单线程环境中使用Hashtable这样的线程安全类有什么缺点?有什么缺点吗?如果不是那么为什么后面会引入非线程安全类?

最佳答案

I was asked by the interviewer about disadvantages of using thread safe class like Hashtable in single threaded environment?

虽然大多数缺点都与性能有关,但还是有的。即使单线程环境中也有多个线程(例如 GC、终结器、信号处理程序、JMX 等),因此该语言仍然需要遵守同步结构,例如 synchronizedvolatile 和 native 锁实现。这些语言功能会刷新内存缓存或使其失效,并影响代码重新排序,这两者都会极大地影响整体运行时性能。

if not then why are there non thread safe class introduced later?

无论是在单线程或多线程应用程序中,非线程安全对象总是比线程安全对象表现得更好。处理本地 CPU 缓存内存的能力是现代硬件提供的主要速度提升之一。如果您不必访问主内存总线,则可以更快地执行操作。同步结构降低了高速缓存的使用能力。

最后,线程安全类在涉及的数据结构以及在多线程应用程序中正确运行所需的逻辑方面通常都更加复杂。这意味着即使我们忽略同步结构,它也可能会使用更多内存并且运行速度更慢,尽管这种情况的程度很大程度上取决于所讨论的特定类

关于java - 在单线程环境中使用Hashtable等线程安全集合类有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55844108/

相关文章:

java - 与扫描器类混淆 -> nextLine()

java - Tomcat 保持 webapp api 运行

java - 多线程私有(private)构造函数

collections - Haskell "collections"语言设计

java - java Collection.sort() 的内存消耗

scala - 如何检查Map中是否存在key或value?

java - Maven 多模块 : error assembling WAR: webxml attribute is required

Java 比较地址

java - 将数据插入二维 byte[] 数组

python - 如何等待线程列表完成? (Python)