Definir el concepto de hilo (thread).
Enviado por Ricardo Montes • 22 de Mayo de 2016 • Ensayo • 7.627 Palabras (31 Páginas) • 261 Visitas
El estudio de este módulo le proporcionará los conocimientos necesarios para:[pic 2][pic 3]
- Definir el concepto de hilo (thread).
- Crear diferentes hilos en un programa Java controlando el código y los datos usados por cada hilo.
- Controlar la ejecución de un hilo y escribir código independiente de la plataforma con hilos.
- Describir las dificultades que pueden surgir cuando varios hilos comparten los mismos datos.
- Usar wait y notify para establecer la comunicación entre hilos.
- Usar synchronized para proteger la integridad de los datos.
Este módulo cubre el procesamiento multihilo, que permite a un
programa ejecutar múltiples tareas al mismo tiempo.
Una forma simple de ver un PC seria considerarlo como un dispositivo dotado de una CPU que realiza los cálculos, una memoria que contiene el programa ejecutado por la CPU y una memoria que contiene los datos con los que opera el programa. Según esta perspectiva, sólo se lleva a cabo un trabajo. Una forma más completa de ver los sistemas informáticos modernos incluye la posibilidad de realizar más de un trabajo al mismo tiempo.
No debe preocuparse ahora de cómo se consigue el rendimiento para el procesamiento multitarea, tenga en cuenta únicamente las implicaciones desde el punto de vista de la programación. Llevar a cabo varios trabajos es como tener varios sistemas de computación. En lo que respecta a este módulo, un hilo, o contexto de ejecución, es el encapsulamiento de una CPU virtual con su propio código y datos de programa. La clase java. lang.Thread permite crear y controlar los hilos.
Nota: A lo largo del módulo, utilizaremos el término Thread para referirnos a la clase java.lang.Thread e hilo para referirnos a los contextos de ejecución.
Un hilo o contexto de ejecución se compone de tres partes fundamentales:
- Una CPU virtual.
- El código que ejecuta la CPU.
- Los datos con los que trabaja el código.
Un proceso es un programa en ejecución. Uno o varios hilos constituyen un proceso. Un hilo se compone de la CPU, el código y los datos, como se ilustra en la Figura 15-1.
Hilo 0[pic 4]
contexto de ejecución
Figura 15-1 Partes de un hilo
T A Sjt- * it[pic 5]
Hilo»
Varios hilos pueden íompartir el mismo código, con independencia de los datos Esto o( une cuando ejecutan código desde distintas instancias de la misma ciase.
De la misma forma, varios hilos pueden compartir los mismos datos, con independencia del código. Esto ocurre cuando comparten el acceso a un mismo objeto.
En programación lava, la CPU virtual se encapsula como una instancia de la í lase Thi ead. Cuando se construye un hilo, el código y los datos que dolmen su contexto vienen especificados por el objeto que se pasa a su v ons truc ton
Creación del hilo
En esta sección se explica la forma de crear un hilo y usar los argumentos del constructor para suministrar el código y los datos que utiliza el hilo durante su ejecución.
El constructor de Thread utiliza como argumento una instancia de Runnable. Esta instancia se crea a partir de una clase que implementa la interfaz Runnable (es decir, proporciona un método pubiic void run()).
Por ejemplo:
- pubiic class ThreadTester {
- pubiic static void main(String args[]) {
- HelloRunner r = new HelloRunner();
- Thread t = new Thread(r);
- t.start();
- }
- }
8
- class HelloRunner implements Runnable {
- int i;
11
- pubiic void run() {
- i = 0;
14
- while (true) {
- System.out.println("Hola " + i++);
- if ( i « 50 ) {
- break;
Lengua)» de programación Java
Copyright 200S aun Mteroiyatama, Irvc Todos toa darachoa matrvMto* Sun Strvka*. R*vta*on <32
- }
- }
- }
- }
En primer lugar, el método mam construye una instancia r de la clase HelloRunner. La instancia r tiene sus propios datos, en este caso, el entero i. Dado que la instancia, r, se ha pasado al constructor de la clase Thread, el entero i de r es el dato con el que el hilo debe trabajar durante su ejecución. F;.l hilo siempre empieza a ejecutarse en el método run de la instancia de Runnable que se haya cargado (en este caso x).
Los entornos de programación multihilo permiten crear múltiples hilos basados en la misma instancia de Runnable. Puede hacerlo de la siguiente manera:
Thread ti = new Thread(r);
Thread t2 = new Thread(r);
En este caso, ambos hilos comparten ¡os datos y el código.
En resumen, la referencia a un hilo se efectúa a través de una instancia de un objeto Thread. El hilo empieza a ejecutarse al principio del método run de la instancia de Runnable que se encuentre cargada. Los datos con los que trabaja el hilo se obtienen de la instancia concreta de Runnable, que se pasa al constructor de ese Thread (Figura 15-2).
Nuevo hilo
[pic 6]
Figura 15-2 Creación de hilos
Hilo»
Inicio del hilo
Los hilos recien creados no empiezan a ejecutarse de forma automática. Es necesario llamar a su método start;. Por ejemplo, puede ejecutar el comando siguiente, como en la línea 5 del ejemplo anterior:
t.start();
La llamada a start pone la CPU virtual encapsulada en el hilo en estado ejecutable, lo que significa que es posible planificar su ejecución por parte de la maquina virtual de Java (JVM). Esto no significa necesariamente que el hilo se ejecute de inmediato.
...