java - HashTable 中的 ArrayList 是线程安全的

标签 java multithreading arraylist concurrency thread-safety

简单的问题。以下代码是线程安全的吗...?

  1. 如果是的话,有没有更好的方法..?
  2. 如果没有,为什么?以及如何使其线程安全。

我的主要疑问是 Hashtable 内的 ArrayList 因为 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
     }
  }

谢谢

最佳答案

If yes, is there is any better way..?

是的,但是使用ThreadLocal>

My main doubt because of ArrayList inside Hashtable because ArrayList is not thread safe.

通常情况下你是对的,但是这段代码确保 ArrayList 只能由一个线程访问。当然,如果您不遵循此模式,它将是线程安全的。

注意:在这种情况下,synchronized (threadObjects) 没有任何区别。

关于java - HashTable 中的 ArrayList 是线程安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14380523/

相关文章:

java - 为什么这段代码会抛出 IllegalMonitorStateException?

java - Java 的轻量级长时间运行方法取消模式

c - 使用多线程时低于预期的加速

java - 如何将元素与二维数组连接

java - log4j 记录器类名通配符

java - Spring Query By Example 使用 "OR"

Java - 在目录中搜索文件

java - 使用 Netty 访问 MySql 数据库

java - 如何遍历 2 个列表并检查一个元素的内容是否与不同列表中的另一个元素相同?

java - 将 ArrayList 强制转换返回到 List 与不强制转换