Usar futuro en respuesta:

scala> val a=Future{1}
a: scala.concurrent.Future[Int] = Future(<not completed>)

scala> a.value
res0: Option[scala.util.Try[Int]] = Some(Success(1))

Return Some (Success (1))

Úselo en IDEA:

object A extends App{
 val a=Future{1}
 println(a.value)
}

Volver Ninguno:

"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe"...
None

¿Por qué? No hay algo como Thread.Sleep, así que en cualquier situación, creo que el futuro volverá de inmediato, dame algunos (éxitos (1))

¡Gracias!

0
wang kai 12 mar. 2021 a las 04:06

1 respuesta

La mejor respuesta

El Future se ejecuta de forma asincrónica. Se envía a la cola del grupo de subprocesos, donde uno de los subprocesos disponibles lo recoge finalmente y se ejecuta.

Cuando está ejecutando en respuesta, en algún lugar (probablemente durante IO), el hilo actual pierde el control, el contexto cambia y otro hilo tiene la oportunidad de tomar la tarea de la cola y completarla.

Cuando se ejecuta como un programa, a.value se ejecuta inmediatamente después de a=Future, en el mismo hilo, la tarea asíncrona todavía está en la cola.

1
Dima 12 mar. 2021 a las 01:17