gpt4 book ai didi

multithreading - Scala List的cons运算符 “::”是线程安全的吗?

转载 作者:行者123 更新时间:2023-12-03 13:14:23 26 4
gpt4 key购买 nike

给定列表上的cons-operator::是线程安全的吗?

例如,如果2个线程在同一列表上使用cons运算符,会发生什么情况?

val listOne = 1::2::3::Nil
val listTwo = 4::5::Nil
val combinedList = listOne ::: listTwo // thread1
val combinedList2 = listOne ::: 7:8:NIL // thread2 on the same time

最佳答案

为了补充吉姆·柯林斯给出的答案:

不变数据结构上的所有操作通常都是线程安全的。
list cons运算符不会修改原始列表,因为每个列表都是不可变的。
相反,它将创建一个新列表,该列表表示列表的更改状态。

线程同步问题仅在不同的线程想要更​​改内存中的相同数据时出现。
此问题称为“共享状态”。
不可变的对象是无状态的,因此不能有共享状态。

Scala还提供可变的数据结构。在软件包名称中查找“可变”一词。
它们具有与Java集合相同的同步问题。

默认情况下,如果您仅在Scala程序中键入List而不添加任何特殊的import语句,Scala将使用不可变列表。SetMap等也是如此。

经验法则:如果一个类不包含var语句,并且没有对包含var语句的任何其他类的引用,则可以将其视为不可变的。
这意味着它可以在线程之间安全地传递。
(我知道专家可以轻松地从此规则构造异常,但是只要您一无所知,这是一个相当不错的规则,可以保留一些异常(exception)情况。)

关于multithreading - Scala List的cons运算符 “::”是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24613016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com