Solución de sincronización de subprocesos por lotes multiproceso
¿Hay algún subproceso que procesar cuando se ejecuta multiproceso? Pruebe el método de sincronización de subprocesos por lotes que se presenta a continuación
En un programa de procesamiento de subprocesos por lotes, a veces debe esperar hasta que todos los subprocesos hayan terminado de ejecutarse antes de continuar con el siguiente procesamiento de tareas. Puede utilizar el siguiente método para resolver el problema. de crear un objeto de bloqueo El objeto de bloqueo proporciona un método para que el hilo actual espere a otros hilos. Consulte el código
/**
*
. * Esta clase se utiliza principalmente para manejar el modelo de protección de sincronización de subprocesos. Por ejemplo, se debe ejecutar un lote de subprocesos en el último subproceso
* Antes de que se pueda realizar la siguiente operación. Cuando se realiza, se puede crear un objeto de bloqueo. El objeto de bloqueo proporciona un subproceso para esperar a otros subprocesos
* Método: si hay subprocesos que no se están ejecutando cuando el subproceso actual se está ejecutando, este subproceso espera; de lo contrario, este subproceso se activa. otros bloqueados
* El hilo finalmente completa la ejecución del hilo
* */
public class LockObject {
private int totalThread = ;
private int currentThread = ;
p>
public LockObject(int totalThread) {
? este hilo total = hilo total;
? este hilo actual =
}
espera vacía sincronizada públicamente () {
? si (este hilo actual lt; este hilo total) {
este hilo actual
prueba {
? ;
} catch (InterruptedException e) {
? // TODO Bloque de captura generado automáticamente
e printStackTrace(); }
? } else {
este hilo actual = ;
notifyAll(); }
public int getTotalThread() {
? return totalThread
}
public void setTotalThread(int totalThread) {
? este totalThread = totalThread
}
public int getCurrentThread; () {
? devolver hilo actual;
}
public void setCurrentThread(int currentThread) {
? this currentThread = currentThread
}
}
Introducción al mecanismo de sincronización de subprocesos por lotes
Este objeto proporciona dos variables privadas. El valor inicial de totalThread es el número total de subprocesos en ejecución y currentThread es el número de subprocesos en ejecución actualmente.
Cuando el subproceso se está ejecutando, después de procesar sus propias tareas, llama al método waitForOtherThread para esperar a que finalicen otros subprocesos, es decir, la comparación del número actual de subprocesos en ejecución y el número total de subprocesos.
Si el número de subprocesos en ejecución es menor que el número total de subprocesos, el número actual de subprocesos en ejecución será El subproceso entra en estado de espera o despierta otros subprocesos en espera
Ver programa de prueba
public class MyThread extends Thread {
public static LockObject lo = new LockObject(
public MyThread(String); nombredelhilo) {
? super(nombredelhilo);
}
p>
public void run() {
El sistema sale println(El hilo actualThread() getName() comienza a ejecutarse);
lo waitForOtherThread()
El sistema sale println(El hilo actualThread() getName( ) finalizar la ejecución);
}
public static void main(String[] args) {
for (int i? = ; i lt ; = ; i ) {
Hilo = new MyThread(i-ésimo hilo); inicio();
? }
}
} lishixinzhi/ Artículo/programa/Java/gj/201311/27516