Diferencia entre revisiones de «Programación de fíos con Java»
Ir a la navegación
Ir a la búsqueda
(Página creada con «= Resumo = * Os fios en Java represéntanse mediante obxectos da clase Thread. ** Podense crear fíos a partir de obxectos de calquera clase que implemente a interfaz Runna…») |
|||
Línea 1: | Línea 1: | ||
+ | = Introducción = | ||
+ | Comezaremos aprendendo a crear e lanzar novos fios (threads) dun proceso con Java, e facer que diferentes fíos dun mesmo proceso colaboren e se coordinen entre sí para facer unha tarefa. No resto deste capítulo veranse os mecanismos e as clases que proporciona a linguaxe Java para a programación de fíos e a súa sincronización. | ||
+ | |||
+ | = Creación de fíos en Java = | ||
+ | |||
+ | = A clase Thread = | ||
+ | |||
+ | = Sincronización de fíos = | ||
+ | |||
+ | = Interrupción de fios = | ||
+ | |||
+ | = Prioridades = | ||
+ | |||
+ | = Depuración (debugging) de aplicaciones multifío = | ||
+ | |||
+ | = Mecanismos de alto nivel para concurrencia = | ||
+ | |||
= Resumo = | = Resumo = | ||
* Os fios en Java represéntanse mediante obxectos da clase Thread. | * Os fios en Java represéntanse mediante obxectos da clase Thread. |
Revisión del 04:50 13 sep 2021
Sumario
Introducción
Comezaremos aprendendo a crear e lanzar novos fios (threads) dun proceso con Java, e facer que diferentes fíos dun mesmo proceso colaboren e se coordinen entre sí para facer unha tarefa. No resto deste capítulo veranse os mecanismos e as clases que proporciona a linguaxe Java para a programación de fíos e a súa sincronización.
Creación de fíos en Java
A clase Thread
Sincronización de fíos
Interrupción de fios
Prioridades
Depuración (debugging) de aplicaciones multifío
Mecanismos de alto nivel para concurrencia
Resumo
- Os fios en Java represéntanse mediante obxectos da clase Thread.
- Podense crear fíos a partir de obxectos de calquera clase que implemente a interfaz Runnable. A propia clase Thread implementa esta interfaz.
- O proceso que realiza un fío impleméntase no método run . Iníciase a execución dun fío co método start, que a súa vez executa o método run.
- O método join suspende a execución do fío actual á espera de que termine a execución do fío para o que se invoca.
- A palabra clave synchronized fai que un fío so poida executar un bloque de código tras obter o bloqueo dun obxecto de bloqueo, que se libera unha vez executado o bloque.
- Se o obxecto de bloqueo está bloqueado, suspéndese a execución do fío á espera de conseguir o bloqueo do obxecto de bloqueo. Deste xeito conseguese que o bloque de código se execute en exclusión mutua con outros fíos.
- Pódese aplicar:
- para métodos non estáticos (nese caso, o obxecto de bloqueo é o obxecto para o que se executa o método, this )
- para métodos estáticos (nese caso, o obxecto de bloqueo é a clase a que pertence ó método)
- para bloques de código cualesquiera (nese caso, especifícase explícitamente o obxecto de bloqueo).
- O interbloqueo ou deadlock prodúce cuando dous ou máis fíos manteñen bloqueados un conxunto de obxectos de bloqueo, e a súa execución está suspendida á espera de conseguir bloquear cada un un novo obxecto de bloqueo, que non poden bloquear porque xa están bloqueados por outros fíos.
- Podese evitar o interbloqueo establecendo unha orde para os obxectos de bloqueo, e todos os hilos se bloquean segundo este orde.
- Si, una vez conseguido el bloqueo sobre un objeto de bloqueo obj en un bloque de código synchronized(obj) , un hilo comprueba que no se dan las condiciones necesarias para continuar con su ejecución, puede ejecutar wait() sobre el objeto de bloqueo con obj.wait() . Con ello, su ejecución queda suspendida, y en espera no activa, mientras que otro objeto no ejecute obj.notifyAll() u obj.notify() . notifyAll() reanuda todos los procesos a la espera en el objeto de bloqueo, mientras que notify() reanuda solo uno de ellos.
- Podense incluir nunha clase os mecanismos de sincronización apropiados para permitir o uso dos seus obxectos por distintos fíos de xeito concurrente. Desa maneira, non é preciso implementar neses fíos ningún mecanismo de sincronización para controlar o acceso concurrente ós objetos da clase. Se dice entonces que la clase es thread-safe o segura para su uso concurrente por parte de varios hilos. O paquete java.util.concurrent inclúe una variedad de clases thread-safe.
- En xeral, deben programarse os fios de xeito que se permita a súa interrupción por parte doutros fíos. Para iso deben xestionar de maneira apropiada a excepción InterruptedException, comprobar cada certo tiempo se foron interrumpidos con isInterrupted() ou interrupted() , e realizar as accións oportunas no seu caso.
- Os entornos de desarrollo adoitan permitir a depuración de aplicacións multifío e proporcionar ferramentas para a detección de interbloqueos.
- o paquete java.util.concurrent proporciona mecanismos de alto nivel para concurrencia.