El propósito de la comunicación de subprocesos es permitir que los subprocesos se envíen señales entre sí. Además, la comunicación de subprocesos también puede hacer que el hilo espere las señales de otros hilos. Por ejemplo, el subproceso B puede esperar las señales del subproceso A, que puede ser una señal de que el hilo A ha procesado y completado.
Método Wait ()
- interrumpir la ejecución del método, haga que este hilo espere, renuncie temporalmente al derecho de usar la CPU y permita que otros subprocesos usen este método de sincronización
Método notificar ()
-Niértete esperando en un cierto extremo del hilo de espera debido al uso de esta fiesta sincrónica
Método NotifyAll ()
Despertar todos los hilos esperando el final de la espera debido al uso de este método de sincronización
Cuándo usar el método de espera
Cuando se usa una variable en el método de sincronización utilizado por un hilo, y esta variable debe ser modificada por otros subprocesos para satisfacer las necesidades de este hilo, puede usar el método Wait () en el método de sincronización
Aquí tomaré un ejemplo en la clase como ejemplo para describir brevemente el papel de espera y notificar
Ya sabemos que en múltiples subprocesos, como la venta de boletos, el orden de los boletos vendidos en cada ventana es aleatorio. Si tenemos 2 ventanas de venta de boletos, se estipula que se deben vender 100 boletos a su vez. Después de vender un boleto en la ventana A, el siguiente boleto debe venderse por ventana B. ¿Cómo implementamos esta función?
En primer lugar, creo que si la declaración se puede establecer. Si (i%2 == 0) entonces el hilo 1 se ejecuta, de lo contrario, el hilo 2 se ejecuta, pero las ejecuciones de hilo 1 y hilo 2 son aleatorias, y no se puede especificar para determinar quién se ejecuta por el tamaño de i.
Entonces podemos usar Wait () y notificar () en el hilo
Después de que el hilo 1 esté terminado, espere un momento, luego el hilo 2 se ejecuta, y después de que el hilo 2 esté terminado, luego despierta el hilo 1 y luego nuevamente
Después de que el hilo 1 esté terminado, espere un momento, luego se ejecuta el hilo 2, y después de que el hilo 2 esté terminado, luego despierta el hilo 1
De esta manera, el hilo 1 y el hilo 2 se pueden ejecutar a su vez
Hemos impreso 10 números como ejemplos para escribir un programa, y construimos un total de 2 clases MyPrint y MyPrinttest
Myprint.java
clase pública myPrint implementos runnables {private int i = 0; @Override public void run () {try {imprime ();} capt (interruptedException e) {// toDO Auto generado bloque E.PrintStackTrace ();}} public sincronizado Void imprime () lanza InterruptedException {while (i <10) {System.out.println (thread.currentThread (). GetName ()+":"+i); i ++; notify (); try {wait ();} catch (InterruptedException e) {E.PrintStackTraCe ();}}}Los resultados se muestran en la figura
Puede ver que el hilo 1 y el hilo 2 se han implementado para imprimir alternativamente entre sí.
Solo comprende el proceso de ejecución
while (i <10) {System.out.println (Thread.CurrentThread ().Cuando yo <10, imprima el hilo 1 y luego realice el despertar. Como no hay hilo en el frente, este paso no se ejecuta. Entonces el hilo 1 espera. Después de ejecutar el hilo 2, despierta el hilo anterior, es decir, el hilo 1, y luego imprime el hilo 1,
Este proceso continúa hasta que se rompa el bucle, por lo que podemos realizar rotaciones
Resumir
Lo anterior es todo el contenido de este artículo sobre cómo discutir brevemente el papel de esperar y notificar en la comunicación de hilos. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!