Java 使用集合创建数组列表线程时是否存在性能问题。同步列表?
您好,我想知道如果我使用Java 使用集合创建数组列表线程时是否存在性能问题。同步列表?,java,arraylist,Java,Arraylist,您好,我想知道如果我使用Collections.synchronizedList()方法使ArrayList线程安全,是否存在任何性能问题?如果有问题,它会影响哪些功能,如添加、搜索等 我得到了并发修改异常以消除它我使用了Collections Synchronized方法,但后来我知道它有一些性能问题?我的问题很简单,在不影响性能的情况下,我应该使用哪种方法…所有同步列表的方法都使用比直接访问慢的同步 Vector是List的一个实现,它已经同步了所有方法自java 1.4以来,同步本身几乎不
Collections.synchronizedList()
方法使ArrayList
线程安全,是否存在任何性能问题?如果有问题,它会影响哪些功能,如添加、搜索等
我得到了并发修改异常以消除它我使用了Collections Synchronized方法,但后来我知道它有一些性能问题?我的问题很简单,在不影响性能的情况下,我应该使用哪种方法…所有同步列表的方法都使用比直接访问慢的同步
Vector是List的一个实现,它已经同步了所有方法自java 1.4以来,同步本身几乎不会影响性能。然而,设计有大量同步块的应用程序可能运行缓慢,因为不同的线程正在互相等待 还有其他一些方法可以帮助我们设计多线程应用程序,而无需或只需最少的同步
是的,你会导致线程被阻塞的开销
如果您读列表多于写列表,java.util.concurrent.CopyOnWriteArrayList是您的一个选项。读取速度很快,无需锁定。在获取不可变列表实例时,您可以使用这种方法,因此无需担心多个线程访问它。
List immutablelist=集合。不可修改列表(List) Collections.synchronizedList((List List))的问题在于:在许多情况下,它并没有真正的用处。例如,对于迭代所有元素, 或者,当得到一个值时,根据它进行计算,并用结果替换它,我们无论如何都必须使用手动同步 从 用户必须手动同步返回的数据 在对其进行迭代时列出:
List list = Collections.synchronizedList(new ArrayList());
...
synchronized (list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
未能遵循此建议可能会导致不确定性
行为。
你为什么不直接使用向量呢?这是一个有效的问题。。请给出原因。
java.util.Vector
几乎不受欢迎。避免在代码中使用Vector
和Hashtable
。如果且仅当您确实需要同步时,请使用其他集合并使用集合。synchronizedList()
和类似方法。您确定同步不会影响性能吗?因为我的数组列表很重。它有100多条记录,我对它执行各种操作…谢谢你的回复@AlexR@saurabh一个列表中有100多个元素小得可笑。如果其中有100000个元素,则可以认为它是一个大列表,即使性能问题也不是同步本身。