Cinco, ejemplos de Java multiproceso se puede llamar de uso

I. Antecedentes

1. Con el fin de mejorar el negocio por encima del tiempo, así como la eficiencia del programa, el uso final de multi-threading. Yo uso un multi-hilo exigible a lograr. Aquí uso simple y pequeño castaña es debajo de la barra.

Dos, el perfil exigible

1. En Java, crear un hilo que hay dos maneras, una es la herencia de clases de rosca, se trata de lograr la interface Runnable. Sin embargo, la desventaja de estos dos métodos es que en el extremo de un hilo de tareas de ejecución, los resultados pueden no ser obtenidas. Por lo general, utilizamos solamente las variables compartidas o medios de memoria y comunicación hilo compartidos para lograr el propósito de obtener los resultados de la tarea.

En 2.Java, que también proporciona el uso operativo rescatable y futuro para lograr el acceso a los resultados de la tarea. tarea exigible para llevar a cabo, producen resultados, y futuro para conseguir resultados.

Ya sea la interfaz 3.Callable es similar a la interfaz Ejecutable al código fuente de vista, se puede ver la interfaz invocable se define de la siguiente manera:

@FunctionalInterface
public interface Callable<V> {
    /**
     * Computes a result, or throws an exception if unable to do so.
     *
     * @return computed result
     * @throws Exception if unable to compute a result
     */
    V call() throws Exception;
}

Se puede ver, a diferencia de la interfaz Runnable en que, con un método genérico de llamada valor de retorno V.

En tercer lugar, la pequeña de castañas

1. Código

public class Test0002 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executorService = Executors.newCachedThreadPool();
        Future<String> submit = executorService.submit(new TaskCallable());
        System.out.println("执行任务开始(主线程)。。。");
        String result = submit.get();
        System.out.println(result);
        System.out.println("执行任务结束(主线程)。。。");
    }

    static class TaskCallable implements Callable<String> {
        @Override
        public String call() throws Exception {
            System.out.println("执行任务开始(子线程)。。。");
            Thread.sleep(5000);
            System.out.println("执行任务结束(子线程)。。。");
            return "chenmingxu";
        }
    }
}

2. resultados

执行任务开始(主线程)。。。
执行任务开始(子线程)。。。
执行任务结束(子线程)。。。
chenmingxu
执行任务结束(主线程)。。。

3. Analizar

3.1.submit.get () está en el programa principal, antes de que el programa es que no va a ser bloqueado, pero el programa se producirá después de que se bloqueó después de sólo obtener todos los resultados, el programa principal se iniciará.

3.2. Para que podamos abrir un hilo separado para obtener los resultados del código separada extraída, por lo que se puede mejorar el rendimiento de los programas y de forma independiente el uno del otro con el hilo principal.

4.future método común

V get (): Obtiene los resultados de ejecución asíncrono, si no hay resultados disponibles, este método se bloqueará hasta el cálculo asíncrono es completa.

GET V (largo tiempo de espera, Unidad TimeUnit) : Obtiene el resultado de la ejecución asíncrono, si no hay resultados disponibles, este método va a bloquear, pero hay un límite de tiempo, si el tiempo de bloqueo supera el tiempo establecido de tiempo de espera, el método produce una excepción.

isDone boolean (): si los extremos de ejecución de tareas, cualquiera de los extremos o cancelado durante normal o anormal, de vuelta verdad.

booleano isCanceller (): el primero se cancela si se ha completado la tarea, devuelve cierto.

booleano cancelar (booleano mayInterruptRunning): Si la tarea no se ha iniciado, ejecute Cancelar (...) devuelve el método falsas; si la tarea ya ha comenzado, la ejecución se cancelan método (verdadero) para llevar a cabo esta tarea se interrumpirá hilos para tratar de detener la tarea, Si deja de éxito, devuelve true; cuando se ha iniciado la tarea, ejecutar cancelar método de (falsa) no tendrá ningún efecto en la tarea de ejecutar rosca (rosca a la ejecución normal de terminación), entonces return false; cuando la tarea se ha completado, la ejecución cancelar (...) devuelve falso. mayInterruptRunning parámetro indica si para interrumpir los hilos de ejecución.

Sabemos también que por el método de análisis en realidad Future proporciona tres funciones: (1) capaz de interrumpir la ejecución de la tarea (2) para determinar si llevar a cabo la realización de tareas (3) obtener la cantidad completa de los resultados de ejecución de tareas.

En cuarto lugar, ejemplos

1. Código

public class Test0002 {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newCachedThreadPool();
        Future<String> submit = executorService.submit(new TaskCallable());
        System.out.println("执行任务开始(主线程)。。。");
        new Thread(new Runnable() {
            @Override
            public void run() {
                String result = null;
                try {
                    result = submit.get();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                System.out.println(result);
            }
        }).start();
        System.out.println("执行任务结束(主线程)。。。");
        executorService.shutdown();
    }
    static class TaskCallable implements Callable<String> {
        @Override
        public String call() throws Exception {
            System.out.println("执行任务开始(子线程)。。。");
            String name = "chenmingxu";
            System.out.println("执行任务结束(子线程)。。。");
            return testDemo(name);
        }
        private String testDemo(String name) throws InterruptedException {
            Thread.sleep(5000);
            return name;
        }
    }
}

2. resultados

执行任务开始(主线程)。。。
执行任务开始(子线程)。。。
执行任务结束(子线程)。。。
执行任务结束(主线程)。。。
chenmingxu

3. Analizar

3.1. Podemos ver a partir de los resultados anteriores, así como nuestro hilo principal y la ejecución del hilo niño no se ve afectada por la otra.

En quinto lugar, el final de la

1. Siempre mantener la fe !!!

Publicados 122 artículos originales · ganado elogios 64 · Vistas a 50000 +

Supongo que te gusta

Origin blog.csdn.net/chenmingxu438521/article/details/103784042
Recomendado
Clasificación