Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Scala中对象级别的Val和线程安全_Multithreading_Scala - Fatal编程技术网

Multithreading Scala中对象级别的Val和线程安全

Multithreading Scala中对象级别的Val和线程安全,multithreading,scala,Multithreading,Scala,在我正在查看的现有代码库中偶然发现以下代码。还有其他类似的调用将值设置为myService’等。确认以下部分不是线程安全的,因为myService不是本地的,两个线程同时进入createUser并调用myService.newUser会损坏后续的persona.firstName和persona.lastName等。这是理解吗对吗 object WFService { lazy private val myService = engine.getMyService def cre

在我正在查看的现有代码库中偶然发现以下代码。还有其他类似的调用将值设置为myService’等。确认以下部分不是线程安全的,因为myService不是本地的,两个线程同时进入createUser并调用myService.newUser会损坏后续的persona.firstName和persona.lastName等。这是理解吗对吗

object WFService {
  lazy private val myService = engine.getMyService     

def createUser(persona: Persona): String = {
    val user = myService.newUser(persona.id.toString)
    persona.firstName.map(n => user.setFirstName(n))
    persona.lastName.map(n => user.setLastName(n))

它是val成员,所以我假设它只能有一个对齐。第二个应该返回错误

正如前面提到的,Scala中的lazy val是线程安全的。请参阅:

它是val成员,因此我假设它只能有一个对齐。第二个应该返回错误

正如前面提到的,Scala中的lazy val是线程安全的。请参阅:
Scala中的惰性VAL是线程安全的[1]。您不必担心来自不同线程的多个调用会导致RHS执行两次

因为您有一个对象,所以您也只有一个WFService实例


[1] Scala中的惰性VAL是线程安全的[1]。您不必担心来自不同线程的多个调用会导致RHS执行两次

因为您有一个对象,所以您也只有一个WFService实例


[1]

它是val成员,因此我假设它只能有一条路线。第二个应该返回错误。它是val成员,所以我假设它只能有一个对齐。第二个应该返回错误。因此,如果它是val而不是lazy val,那么它仍然是线程安全的,因为对象的主体是作为构造函数执行的,正如您所说,它是一个单例。因此,如果它是val而不是lazy val,那么它仍然是线程安全的,因为对象的主体是作为构造函数执行的,正如您所说,它是一个单体。