【发布时间】:2013-10-25 08:04:52
【问题描述】:
我只是想探索一下ThreadSafe是什么意思?
以下是我的理解:
对我来说看起来像;允许多个线程同时访问一个集合;这与它的同步无关。例如任何没有同步关键字的方法;是线程安全的,意味着多个线程可以访问它。
开发人员可以选择在此方法上维护更多逻辑(同步),以在多线程访问数据时保持数据完整性。这与线程安全是分开的。
如果我的上述陈述是错误的;只需阅读下面的 JAVA DOC 即可了解 `ConcurrentHashMap:
keySet:视图的迭代器是一个“弱一致”的迭代器,永远不会抛出 ConcurrentModificationException,并保证遍历构造迭代器时存在的元素,并且可能(但不保证)反映构造后的任何修改。
上面的声明说keySet迭代器不会保证数据的完整性;而多线程正在修改集合。
你能回答我吗,*ConcurrentHashMap 的 KeySet 迭代器是线程安全的吗?
我对线程安全的理解是正确的??
【问题讨论】:
-
你的问题本身就有答案。
-
随着 javadoc 的发展,这非常清楚,没有答案可以更好或更清晰地解释它。你到底有什么不明白的?
-
ConcurrentHashMap keySet() 是线程安全的,因此可能不需要同步或复制。
-
“迭代器永远不会抛出 ConcurrentModificationException,并保证遍历在迭代器构造时存在的元素”——这足以使某些东西成为“线程安全”。问题是,您究竟将什么定义为“线程安全”...
-
@afk5min 引用的是您对线程安全的定义吗?所以这意味着线程安全不会确保对集合进行什么修改..只是允许多个线程能够遍历元素..?
标签: java multithreading