【发布时间】:2013-01-17 13:49:16
【问题描述】:
简单的问题。下面的代码是线程安全的吗...?
- 如果是,有没有更好的方法..?
- 如果不是,为什么。?以及如何使它成为线程安全的。
我的主要疑问是因为ArrayList 在Hashtable 中,因为ArrayList 不是线程安全的。所以如果它是Hashtable 的一部分,也会发生同样的事情。
Hashtable<Thread, List<String>> threadObjects = new Hashtable<Thread, List<String>>();
// lets assume some object is added.
synchronized (threadObjects)
{
thread = Thread.currentThread();
List<String> v = threadObjects.get(thread);
if (null != v)
{
// do something
}
}
谢谢
【问题讨论】:
-
为什么不将列表作为参数传递给您的线程?
-
1.您发布的部分是线程安全的,但这完全取决于您如何处理列表。 2. 不要使用
Hashtable,因为它已经过时了。例如,使用ConcurrentHashMap,或仅使用Collections.synchronizedMap(new HashMap())。 -
@fge 不,我不想要。
-
如果
threadObjects不是本地引用,则应声明为final以清楚起见并避免代码的其他部分意外覆盖。 -
实际上,没有足够的代码来确定您想要做什么以及您的数据将在哪里暴露给其他线程
标签: java multithreading arraylist concurrency thread-safety