您好我想知道如果使用ArrayList
方法使Collections.synchronizedList()
线程安全,是否存在任何性能问题?如果有问题,它会影响哪些功能,如添加,搜索等。
我正在获得并发修改异常以摆脱它我使用了Collections Synchronized方法但后来我才知道它有一些性能问题?我的问题很简单,我应该使用哪种方法而不影响性能......
答案 0 :(得分:3)
同步列表的所有方法都使用同步,这比直接访问更慢。
java.util.Vector是List的一个实现,它已经同步了所有方法
答案 1 :(得分:0)
自java 1.4以来,同步本身几乎不会影响性能。但是,使用大量同步块设计的应用程序可能会运行缓慢,因为不同的线程正在相互等待。
还有其他方法可以帮助我们在没有或同步最少的情况下设计多线程应用程序。
答案 2 :(得分:0)
如果您阅读的列表多于您写入的列表,则java.util.concurrent.CopyOnWriteArrayList是您的选项。读取速度很快,没有锁定。
答案 3 :(得分:0)
您可以使用此方法,因为您正在获取不可变列表实例,因此无需担心多个线程占用它。 列出immutablelist = Collections.unmodifiableList(list);
答案 4 :(得分:0)
Collections.synchronizedList((List<T> list))
的问题在于:在许多情况下,它并没有真正有用。例如,迭代所有元素,
或者在获取值时,根据它进行计算,并将其替换为结果,我们无论如何都必须使用手动同步。
来自Collections.synchronizedList((List<T> list))
用户必须手动同步返回的内容 迭代时列出:
List list = Collections.synchronizedList(new ArrayList()); ... synchronized (list) { Iterator i = list.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next()); }
不遵循此建议可能会导致不确定性 行为。强>