Runable, llamable, futuro, FutureTask, EjecutorService, Excetor, Excutors y ThreadpoolExcetor en Java resume estas palabras clave y su uso.
Primero clasifíquelos:
Runable, llamable
Futuro, Futuretask
EjecutorService, excetor, excutores, threadpoolexcetor
1. Acerca de Ranable y Callable
En primer lugar, hay tres formas de crear hilos en Java:
Ventajas y desventajas de tres implementaciones:
Debido al hilo heredado, no se pueden heredar otras clases, y el hilo actual se puede obtener.
Implementar la interfaz ejecutable, sin valor de retorno, obtenga el hilo actual. CurrentThread ()
Implementar la interfaz invocatoria, puede obtener el valor de retorno a través de Future.get () y obtener el subproceso actual. CurrentThread ()
Hilo heredado, dos pasos:
Class DemothRead extiende el hilo {@Override public void run () {super.run (); // Realizar operación de consumo de tiempo ...}} DemothRead t = new DemothRead (); T.Start ();Para implementar el runable, generalmente use de la siguiente manera:
new Thread (new Runnable () {@Override public void run () {// hacer algo}}). start ();Por simplicidad.
Es bastante problemático obtener los resultados de la ejecución de hilos en los dos métodos anteriores y no se puede obtener directamente. JDK1.5 agrega el método Callable, Callable Call () para devolver valores y arrojar excepciones. Callable puede devolver un objeto futuro cargado con los resultados del cálculo.
Código fuente llamable:
Interfaz pública Callable <V> {v Call () arroja excepción;}Uso básico de llamadas:
FUTURETASK <Integer> FUTURETASK = new FutureTask <Integer> (new Callable <Integer> () {@Override public Integer Call () arroja excepción {// hacer algo return null;}}); hilo hilo = new Thread (futuretask); thread.start (); integer dult = futuretask.get ();;Ejecutar la tarea invocable puede obtener un objeto futuro y ejecutar el valor de retorno ejecutado por el hilo a través del método get () de futuro. Entonces ... Futuro,
¿Cuál es la diferencia entre FutureTask y cómo usarla?
-> Next ()
2. Acerca de Future y Futuretask
Para obtener los resultados de ejecución del hilo, se introdujo la FuturetAk de Future. Entonces, ¿cuál es su relación y cómo usarla?
La clase futura se encuentra bajo el paquete java.util.concurrent, que es una interfaz:
Interfaz pública Future <V> {boolean Cancel (boolean MayInterruptUrning); booleano iscancelled (); boolean isdone (); V get () lanza interruptedException, ExecutionException; V Get (Tiempo de espera largo, unidad de tiempo de tiempo) lanza interruptedException, ExecutionException, TimeOutException;}El futuro define 5 métodos:
1) Boolean Cancel (boolean MayInterruptiRning): intente cancelar la ejecución de esta tarea. Si la tarea se ha completado, o se ha cancelado, o no se puede cancelar por alguna otra razón, este intento fallará. Cuando se llama a Cancelar (), si la llamada es exitosa y la tarea no se ha iniciado, la tarea nunca se ejecutará. Si la tarea se ha iniciado, el parámetro MayInterruptUnning determina si el hilo que ejecuta la tarea debe interrumpirse de una manera que intente detener la tarea. Después de que este método regrese, las llamadas posteriores a ISDone () siempre devolverán verdaderas. Si este método devuelve verdadero, las llamadas posteriores a iSCancelled () siempre devolverán verdaderas.
2) Boolean IsCancelled (): Devuelve verdadero si la tarea se cancela antes de que se complete normalmente.
3) boolean isDone (): devuelva verdadero si la tarea se ha completado. Esto puede hacerse debido a la terminación normal, la excepción o la cancelación, en todos estos casos, este método devolverá verdadero.
4) V get () lanza interruptedException, ExecutionException: si es necesario, espere a que se complete el cálculo y luego obtenga su resultado.
5) V obtenga (tiempo de espera largo, unidad de tiempo de tiempo) arroja interruptedException, ExecutionException, TimeOutException: si es necesario, espere como máximo después del tiempo dado para completar el cálculo y obtener el resultado (si el resultado está disponible).
En general, Future proporciona tres funciones:
Determinar si la tarea se completa;
Capacidad de interrumpir tareas;
Capaz de obtener resultados de ejecución de tareas.
Puntos clave:
RunnableFuture hereda la interfaz Runnable y la interfaz futura, mientras que FuturetAk implementa la interfaz RunnableFuture.
Implementación de FutUreTask:
clase pública FUTURETASK <V> Implementa RunnableFuture <v>
Implementación de la interfaz RunnableFuture:
Public Interface RunnableFuture <v> extiende Runnable, Future <V> {void run ();}FutUreTask es una clase de implementación única de la interfaz futura.
Además de envolver FUTURETASK con hilo, hay otra forma de usarlo:
EjecutorService Ejecutor = Ejecutors.newCachedThreadPool (); FutureTask <integer> futureTask = new FutureTask <Integer> (new Callable <Ingerger> () {@Override public Integer Call () lanza la excepción {// hacer algo return null;}}); eCuter.submite (futureSkask); intreger súbger = Futeger = FUTUREGER El marco del ejecutor se usa aquí.
-> next ();
3. Acerca de Ejecutorservice, Excetor, Excutors, ThreadPoolExcetor
El Marco del Ejecutor se introdujo en Java 5. El Marco del Ejecutor es un marco que ejecuta tareas asincrónicas que ejecutan llamadas de políticas, programas, ejecutan y controlan.
Antes de hablar sobre el marco del ejecutor, necesitamos introducir un nuevo concepto: ThreadPoolExecutor:
Public ThreadPoolExecutor (IntCorepoolSize, int MaximumummoolSize, Long KeepAlivetime, TimeUnit Unit, Bloquingqueue <Runnable> WorkQuqueue, ThreadFactory ThreadFactory, RecheedExecutionHandler Handler)
ThreadPoolExecutor es la implementación subyacente de la clase de ejecutores.
En la documentación de ayuda JDK, hay un pasaje:
"Se recomienda encarecidamente que los programadores usen los ejecutores de métodos de fábrica más convenientes.
Entonces, ¿qué son Ejecutorservice, Excetor y Excutors?
El excetor es una interfaz central en el nivel abstracto:
Ejecutor de interfaz pública {void execute (comando runnable);}La interfaz EjecutorService extiende la interfaz del Ejecutor y proporciona métodos como devolver objetos futuros, terminar, cerrar los grupos de subprocesos, etc.
Public Interface EjecutorService extiende el ejecutor {void shutdown (); <t> futuro <t> enviar (tarea llamable <t>); <t> futuro <t> Subt (tarea runnable, resultado t); <T> LIST <Future <t>> InvokeAll (Collection <? Extiende las tareas llamables <t>>, tiempo de espera largo, unidad de tiempo de tiempo) lanza interruptedException;}Los ejecutores es una clase de herramientas similar a las colecciones. Proporciona métodos de fábrica para crear diferentes tipos de grupos de subprocesos, como FixedThreadPool o CachedThreadPool.
Ejecutores de clase pública {public static ejecutorservice newfixedThreadPool (int nthreads) {return New ThreadPoolExecutor (nthreads, nthreads, 0l, timeUnit.milliseConds, new LinkedBlockingqueue <Runnable> ()); } public static EjecutorService NewCachedThreadPool () {return New ThreadPoolExecutor (0, Integer.max_value, 60L, TimeUnit.Seconds, New SynChonousqueue <Runnable> ()); }}Lo anterior es una compilación de palabras clave multiproceso Java, por lo que no será desordenada.
Lo anterior es la implementación de la clasificación de palabras clave multiproceso en Java introducida por el editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!