面试官问我有关在单线程环境中使用像Hashtable这样的线程安全类的缺点吗?有什么缺点吗?如果不是,那以后为什么要引入非线程安全类呢?
答案 0 :(得分:1)
答案 1 :(得分:0)
面试官问我有关在单线程环境中使用像Hashtable这样的线程安全类的缺点吗?
尽管大多数缺点都围绕性能而存在。即使单线程环境中也有多个线程(例如GC,终结器,信号处理程序,JMX等),因此该语言仍然需要遵循synchronized
,volatile
和本机锁实现。这些语言功能会刷新或使内存缓存无效,并影响代码的重新排序,这两者都会极大地影响整体运行时性能。
如果不是,那么为什么以后会引入非线程安全类?
在单线程或多线程应用程序中,非线程安全对象的性能始终优于其线程安全对象。处理本地CPU缓存的能力是现代硬件提供的主要速度提升之一。如果您不必伸向主存储器总线,则可以更快地执行几个数量级的操作。同步结构会降低缓存的使用能力。
最后,线程安全类通常在涉及的数据结构以及使它们在多线程应用程序中正确运行所需的逻辑方面更为复杂。这意味着,即使我们忽略了同步结构,尽管情况在很大程度上取决于所讨论的特定类,但它可能会占用更多的内存并运行得更慢。