Arte programación concurrente de Java (17) Intercambiador

Intercambiador de intercambio de datos entre hilos

Intercambiador (intercambiador) es una herramienta de la clase para la colaboración entre los hilos. Intercambiador para el intercambio de datos entre los hilos. Proporciona un punto de sincronización, en este punto de sincronización, dos hilos pueden intercambiar datos entre sí. Estos dos hilos a método de intercambio de datos de cambio, método si el primer hilo para ejecutar intercambio (), que ha estado esperando para un segundo hilo también realiza método de intercambio, cuando dos hilos han alcanzado el punto de sincronización, estos dos hilos se pueden intercambiar datos, pasando este hilo producido datos entre sí.

escenarios

Intercambiador se puede utilizar para el algoritmo genético, algoritmo genético fue elegir a dos personas como compañero, esta vez los dos va a intercambiar datos y el uso de normas elaboradas dos resultados de apareamiento cruzadas. Intercambiador también se puede utilizar para la corrección de pruebas, por ejemplo, necesitaremos un agua de banco de papel por medios artificiales entrada de agua en la banca electrónica, con el fin de errores EVITAR, los dos hombres estaban usando la entrada AB Kong, luego entró en Excel, las necesidades del sistema para cargar tanto Excel , corrección de pruebas y dos de datos de Excel para ver si la misma entrada.

public class ExchangerTest {
    private static final Exchanger<String> exgr = new Exchanger<String>();
    private static Executor ServicethreadPool = Executors.newFixedThreadPool(2);

    public static void main(String[] args) {
        threadPool.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    String A = "银行流水A"; // A录入银行流水数据 
                    exgr.exchange(A);
                } catch (InterruptedException e) {
                }
            }
        });
        threadPool.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    String B = "银行流水B"; // B录入银行流水数据 
                    String A = exgr.exchange("B");
                    System.out.println("A和B数据是否一致:" + A.equals(B) + ",A录入的是:"
                            + A + ",B录入是:" + B);
                } catch (InterruptedException e) {
                }
            }
        });
        threadPool.shutdown();
    }
}

Si dos hilos tienen un ningún intercambio () método se ejecuta, se tendrá que esperar mucho tiempo si le preocupa que haya circunstancias especiales se producen, para evitar las esperas pueden utilizar el intercambio (V x, longtimeout, unidad TimeUnit) el establecimiento de espera máximo.

Publicado 24 artículos originales · ganado elogios 1 · visitas 534

Supongo que te gusta

Origin blog.csdn.net/qq_45366515/article/details/105267221
Recomendado
Clasificación