HashTable中的ArrayList是线程安全的

Sum*_*ngh 0 java concurrency multithreading arraylist thread-safety

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

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

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
     }
  }
Run Code Online (Sandbox Code Playgroud)

谢谢

Pet*_*rey 5

如果是的话,有没有更好的方法..?

是的,但使用ThreadLocal>

我主要怀疑是因为在Hashtable中有ArrayList,因为ArrayList不是线程安全的.

通常你会是对的,但是这段代码确保只有一个线程访问ArrayList.当然,如果你没有遵循这种模式,它将是线程安全的.

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