jjzjj

synchronizedList

全部标签

java - Collections.synchronizedList() 使用什么模式

我正在阅读方法Collections.synchronizedList()的实现并且很困惑它是装饰器模式还是代理模式的例子? 最佳答案 绝对是装饰器。它用相同接口(interface)的不同实现包装提供的列表,该接口(interface)的方法改变相同底层集合的行为(通过同步访问),同时将方法直接委托(delegate)给包装的实例。如果它是代理模式,则您不一定需要在构造期间传递要包装的集合,并且这些方法在幕后不一定会在每次调用时都引用完全相同的集合实例。另见:ExamplesofGoFDesignPatternsinJava'sc

java - Vector 与 SynchronizedList 性能

在阅读有关集合实现的Oracle教程时,我发现了以下句子:Ifyouneedsynchronization,aVectorwillbeslightlyfasterthananArrayListsynchronizedwithCollections.synchronizedList来源:ListImplementations但是在寻找它们之间的区别时,很多人不鼓励使用Vector,当需要同步时应该用SynchronizedList代替。那么哪一方有权利被跟随呢? 最佳答案 当您使用Collections.synchronizedLis

java - 一般 synchronizedList 问题

我有一个关于同步列表的一般性问题。可以说在构造函数中我正在创建一个列表ListsynchronizedList=Collections.synchronizedList(list);我有一个方法可以将一个对象添加到列表中。publicvoidadd(Strings){synchronizedList.add(s)}还有另一个线程每隔几秒检查一次是否有几行,将其转储到一个文件并全部删除。现在假设我迭代每一行并将其保存到数据库中。在所有迭代之后,我清除了列表。多线程支持对我有何帮助?我可以在另一个线程中的clear()发生之前向列表中添加一个元素。除非我自己管理锁(我真的不需要同步列表)它

java - 为什么我需要同步 Collections.synchronizedList 返回的列表

我在dos.oracle.com上找到了这个publicstaticListsynchronizedList(Listlist)Returnsasynchronized(thread-safe)listbackedbythespecifiedlist.Inordertoguaranteeserialaccess,itiscriticalthatallaccesstothebackinglistisaccomplishedthroughthereturnedlist.Itisimperativethattheusermanuallysynchronizeonthereturnedlist

java - CopyOnWriteArrayList 和 synchronizedList 的区别

根据我的理解,并发集合类优于同步集合,因为并发集合类不会锁定整个集合对象。相反,它们锁定了集合对象的一小部分。但是当我检查CopyOnWriteArrayList的add方法时,我们正在获取对完整集合对象的锁定。那为什么CopyOnWriteArrayList比Collections.synchronizedList返回的列表更好呢?我在CopyOnWriteArrayList的add方法中看到的唯一区别是每次调用add方法时我们都在创建该数组的副本。publicbooleanadd(Ee){finalReentrantLocklock=this.lock;lock.lock();tr

Java:CopyOnWriteArrayList 与 synchronizedList

CopyOnWritearraylist和Collections.synchronizedList(..)有什么区别?什么时候应该优先选择一个。 最佳答案 CopyOnWriteArrayList当读取次数远远超过写入次数时,应使用列表。这是因为您正在用不必要的同步换取每次写入时昂贵的数组复制。例如,当您在多线程环境中有一个事件监听器的List时,您会想要使用CopyOnWriteArrayList,因为事件被触发,因此列表被频繁迭代很少注册事件监听器 关于Java:CopyOnWrit

java - Collections.synchronizedList() 方法有什么用?它似乎没有同步列表

我正在尝试使用两个线程将String值添加到ArrayList。我想要的是,当一个线程添加值时,另一个线程不应该干扰,所以我使用了Collections.synchronizedList方法。但似乎如果我没有在对象上显式同步,则添加是以非同步方式完成的。没有显式同步块(synchronizedblock):publicclassSynTest{publicstaticvoidmain(String[]args){finalListlist=newArrayList();finalListsynList=Collections.synchronizedList(list);finalOb

java - Vector vs Collections.synchronizedList(ArrayList)

Vector是同步的,ArrayList是不同步的但是我们可以通过Collections.synchronizedList(aList)来同步一个ArrayList,那么哪个会更好更快呢? 最佳答案 同步收集既浪费时间又危险。为什么它们不好的一个简单例子是考虑两个线程在同一个集合上同时运行一个循环:inti=0;while(i我们的列表可以同步(例如Vector),但这段代码仍然会严重中断。为什么?因为对size()、get()、remove()的各个调用是同步的,但一个线程仍可能在另一个线程迭代列表时从列表中删除项目。换句话说,我

java - Collections.synchronizedList 和同步

Listlist=Collections.synchronizedList(newArrayList());synchronized(list){list.add("message");}这里真的需要block“同步(列表){}”吗? 最佳答案 您不需要像您在示例中那样进行同步。但是,非常重要的是,您需要在迭代时围绕列表进行同步(如Javadoc中所述):Itisimperativethattheusermanuallysynchronizeonthereturnedlistwheniteratingoverit:Listlist=

java - 是否有 Java 的 Collections.synchronizedList 的 Kotlin 等价物?或者这在 Kotlin 中是不需要的

在Kotlin中编码,需要一个线程安全列表,如下所述:javaconcurrentArrayListaccessCollections.kt好像没有这个功能。Kotlin的可变列表是否已经是线程安全的?如果没有,我该如何做到这一点?谢谢。 最佳答案 IfItrytousetheJavaListawarningmessagecomesup"Thisclassshouldn'tbeusedinKotlin..."Java列表(和其他集合)是mappedtypes在Kotlin。所以你可以使用Collections.synchronize
12