En la plataforma Java, los roles que implementan llamadas asincrónicas tienen los siguientes tres roles: los datos reales de la persona que llama en la factura de embarque
Cuando una persona que llama llama a la operación de tiempo de tiempo y no puede devolver los datos de inmediato, primero devolverá una factura de embarque.
Vaya a la pastelería para comprar pasteles, no necesita esperar a que se haga el pastel (suponiendo que lleva mucho tiempo hacerlo), solo necesita obtener una factura de embarque (vaya a hacer otra cosa) . Cuando el pastel está listo, puede obtener la factura de ir al pastel está bien.
Public Class Main {public static void main (string [] args) {system.out.println ("principal begin"); data2 = host.request (20, 'b'); Catch (InterruptedException E) {} System.out.println ("principal OTROJOB END"); data2 .getContent ());
La clase principal aquí es equivalente a "Cliente", y el anfitrión es equivalente a "Cake Shop". es equivalente a recoger los productos. Después de un período de tiempo (después de dormir por un período de tiempo), llame a Data1.getContent (), lo que significa obtener la factura de embarque para obtener el resultado de la ejecución.
Echemos un vistazo a lo que hizo la pastelería después de que el cliente ordenó el pastel:
Host de clase pública {Solicitud de datos públicos (Final Int Count, Final Char C) {System.out.println ("Solicitud (" + Count + "," + C + ") Begin"); Entity Final Futuredata Future = new Futuredata (); clase interior. Reallaldata = new Realdata (Count, C); // (3) Recuperar la entidad Futuredata como el valor de retorno de retorno;}}
Después de recibir la solicitud, el anfitrión ("Cake Shop") se convirtió en un futuro de instancia del "Libro de la Cabriminación", y luego ordenó que el "Cake Maker" RealData haga el pastel. . Entonces, lo que el anfitrión devuelve al cliente es solo el futuro "Libro de la ira", no el pastel. Después de terminar el pastel, el fabricante de pasteles puede dar el correspondiente pastel "Libro de embarque", es decir, Future.SetrealData (RealData).
Echemos un vistazo a cómo el pastelero hace pasteles:
Cree una cadena que contenga los caracteres del conteo C.
Public Class RealData implementa datos {Contenido de cadena final privada; buffer = nuevo Char [Count]; .println("making RealData(" + count + ", " + c + ") END"); this.content = new String(buffer); } public String getContent() { return content; } }
Ahora echemos un vistazo a cómo el futuro "Bill Bill of Moking" corresponde al "contenido" del pastel:
Public Class Futuredata Data {private realData realData = null; } this.realData = reallAdata; ();
Después de que el cliente termine su propio negocio, tomará su propio "Libro de embarque" para recoger el pastel:
System.out.println ("data1 =" + data1.getContent ());
Si el pastel no está listo, tienes que esperar:
while (! Ready) {try {Wait ();
Análisis de programas
Para cada solicitud, el host generará un hilo, que es responsable de generar el "pastel" que necesita el cliente. Después de esperar un tiempo, si el pastel no está listo, los clientes deben esperar. El cliente solo puede quitar el pastel hasta que se realiza el "pastel", es decir, Future.SetReavlAdata (RealData);
Cada hilo es solo responsable de hacer el "pastel" que un cliente específico necesita. Es decir, el cliente A corresponde al maestro de pastel A, y el cliente B corresponde al Cake Master B. Incluso si el pastel del cliente B está preparado primero, el cliente A solo puede esperar a que el pastel Master A prepare el pastel. En otras palabras, no existe una relación competitiva entre los clientes.
Dos métodos de futurado están configurados para sincronizar. Importa si el pastel está listo.
Este es en este artículo.