Está en la página 1de 5

INTRODUCCION

Este documento se realizó con el fin de adquirir o consolidar el conocimiento de la


unidad con lo que se refiere a programación concurrente (multihilo).
El contenido de este documento es acerca de los hilos (Threads) y multihilos
IMPLEMENTACION CONCURRENTE (MULTIHILOS)

Para entender la implementación recurrente refiriéndonos a multihilos, primero


tenemos que saber qué; un hilo es un único flujo de ejecución dentro de un
proceso podemos hacer que nuestros programas aparentemente realicen varias
tareas al mismo tiempo. Los hilos separados realmente no se ejecutan al mismo
tiempo, en realidad cada hilo obtiene como secuencias del tiempo del mismo
procesador. Y tiene estas características respecto a un programa multihilo:
 Un programa multihilo contiene dos o más partes que se pueden ejecutar de
manera concurrente o simultánea,
 A cada parte del programa se le denomina como hilo (thread),
 La programación multihilo es una forma especializada de multitarea, Existe
multitarea basada en procesos y basada en hilos.
 Basada en procesos, permite que se puedan ejecutar dos o más programas a
la vez de manera concurrente. Multitarea basada en hilos es la unidad más
pequeña de código que se puede seleccionar, de tal forma que un mismo
programa puede realizar dos o más tareas de forma simultánea. (Por ejemplo,
un editor puede dar formato y estar imprimiendo al mismo tiempo).
Debemos de saber un hilo es la unidad más pequeña de código despachable, los
hilos a menudo son llamados procesos ligeros, es muy similar, pero con la
diferencia que un hilo corre bajo el contexto de otro programa y los procesos
mantienen su propio espacio entorno a operaciones. Los hilos dependen de un
programa padre en lo que se refiere a recurso de ejecución.
En relación con los multiprocesos, un proceso es un programa ejecutándose
dentro de su propio espacio de direcciones java en un sistema multiproceso, esto
significa que soporta varios procesos corriendo a la vez dentro de sus propios
espacios de direcciones, un mismo procesos Java puede tener uno o varios hilos
(Threads), monotarea en caso de un Thread.
Un thread permite distribuir el tiempo de ejecución y recurso asignados o
determinados bloques de un programa; existen maneras para trabajar con threads
en la clase java.
Uno es heredar de la thread esta clase proporcionada con el JDK contiene todos
los mecanismos necesarios para crear y ejecutar “Threads”.
El otro es emplear la interface Runnable la cual contiene los métodos necesarios
para operar con Threads, aunque claro esta como toda clase debe implementar
sus métodos. La clase Thread implementa la interface Runnable de quien hereda
el método run.
Casi todas las clases referentes al manejo de Threads se encuentra en el paquete
java.Lang.*

Programa de flujo único (Single-Thread), es aquel que utiliza como único flujo de
control para controlar su ejecución. La sincronización entre múltiples partes de un
programa se lleva a cabo mediante un bucle de suceso único. Existen ocasiones
en las que dos o más hilos pueden intentar acceder a los mismos recursos y/o
datos. Esta misma situación en un contexto computacional podría darse cuando
dos hilos quieren acceder a un mismo archivo para escribir información, o bien
cuando dos hilos acceden a una misma conexión de base de datos: uno podría
estar ejecutando sentencias update mientras el otro podría ejecutar el “commit” y
dejar en firme las sentencias que ejecutó el primero y que, aún, no estaban
verificadas.
El modificador “synchronized” aplicado a la declaración de un método garantiza
que este será ejecutado por un único thread a la vez.
Creación y control de hilos
Las técnicas para crear un “Thread”.
una es: Heredar de una clase java.lang.Thread y sobrescribir el método “Run()”.
La otra es implementar la interfaz java.lang.Thread pasándole el objeto que
implementa java.lang.Runnable como parámetro.
La creación de un hilo se realiza creando un objeto de tipo Thread java define dos
formas de hacer esto, una es implementar la interfaz Runnable y la otra es
extendiendio la clase tread
La implementación de un de la interfaz Runnable, un Hilo puede ser creado sobre
cualquier objeto que implemente la interfaz, una clase solo tiene que implementar
un solo método llamado run() cuya declaración es la siguiente: public abstract
void run(), después es necesario crear un objeto del tipo Thread dentro de esa
clase.
Thread (Runnable objeto-Hilo, String Nombre-Hilo)
Una vez creado el nuevo hilo, no inicia su ejecución hasta que se llame al método
start()
Synchronized void Start()
En un programa multihilo el hilo principal debe ser el ultimo que finalice su
ejecución. Si el hilo principal finaliza antes de que un hilo hijo, entonces el
interprete de java puede “bloquearse”
Un hilo cambia al estado bloqueado cuando intenta realizar una tarea que no
puede completarse de manera inmediata y debe esperar temporalmente hasta que
este completo. Si un hilo que encuentra código que no puede ser ejecutado aún
debe llamar al método Wait() para cambiar al estado en espera.
Un programa multihilo puede crear tantos hilos como lo requiera, en la
programación de un multihilo es importante que el hilo principal termine su
ejecución el resto de los hilos. Java provee dos métodos para determinar si un hilo
ha terminado su ejecución.
 isAlive()
 join()

Los atributos de un Thread varían de una implementación a otra, sin embargo, a


manera general los atributos pueden pasar por varios estados dentro de toda su
vida.
Puede estar ejecutándose, también puede estar preparada para ejecutarse tan
pronto como disponga de tiempo de CPU. Un hilo que está ejecutándose puede
suspenderse lo que equivale a detener temporalmente su actividad. El hilo
suspendido puede reanudarse permitiendo que continúe su actividad ay donde la
dejo. Un hilo puede estar bloqueado cuando espera un recurso. En cualquier
momento, un hilo puede detenerse, finalizando su ejecución de manera inmediata,
una vez detenido el hilo no puede reanudarse.
Manipulación de hilos
al iniciar la ejecución de un programa java ya hay un hilo ejecutándose es lo que
se conoce como “hilo principal” del programa, ya que es lo que se ejecuta cuando
inicia el programa el hilo principal es importante por dos razones:
 Es el hilo desde el que se crearan el resto de hilos del programa
 Debe ser el último hilo que determine su ejecución, cuando el hilo principal
finaliza el programa termina
Suspensión de hilos.
El método Sleep() suspende la ejecución del hilo que lo llama, durante un periodo
especificado en milisegundos. Su forma general es :
Static void sleep(long milisegundo) throws IterruptedException.

Sincronización de hilos
Cuando dos o más hilo necesitan acceder de manera simultánea a un recurso
compartido necesitan asegurarse de que solo uno de ellos accede al mismo en un
instante dado el proceso mediante el cual se consigue esto se llama
sincronización
La sincronización de código puede realizarse de dos maneras diferentes
 Con métodos sincronizados
 Con el uso de la instrucción sinchronized
Para la comunicación entre hilos, el uso de monitores implícitos en objetos Java es
bastante potente, pero hay un nivel más de control que se puede conseguir con la
comunicación entre procesos.
Las reglas de utilización son estas:
Wait() le indica al hilo en curso que abandone el monitor que se valla a dormir
hasta que otro hilo entre en el mismo monitor y llama a notify().
Notify() despierta al primer hilo que hizo una llamada a wait() sobre el mismo
objeto
Notify All() despierta a todos los hilos que realizaron una llamada a wait() sobre el
mismo objeto. El hilo con mayor prioridad entre los que han sido despertados es el
primero en ejecutarse
Para asegurarse de que hilos concurrentes no se estorban y operan
correctamente con datos compartidos, un sistema estable previene la inanición y
el punto puerto o interbloqueo

También podría gustarte