Sie sind auf Seite 1von 7

Practica # 4 Procesos en Java

1. INTRODUCCIN
Java dispone de un mecanismo de hilos de proceso que permite crear este tipo de aplicaciones de una forma considerablemente fcil. Gran parte de los estndares de la plataforma Java emplean hilos de proceso de manera implcita, es decir, sin que el programador tenga que ser consciente de ello. Muchas de las estructuras de datos proporcionadas por la API estndar de Java estn preparadas para afrontar las operaciones de lectura y escritura simultnea. En estos casos Java realiza la mayor parte del trabajo que implican los hilos de proceso, y por ello no es preciso que el programador entienda todas y cada una de dichas tareas que subyacen. Sin embargo, aunque no sea necesario s que es conveniente, ya que ello constituye el paso previo para que el programador sea despus capaz de implementar mecanismos equivalentes en sus propias aplicaciones.

2. CONCEPTOS
Un proceso es una instancia de un programa que se est ejecutando. Un explorador y un editor de texto ejecutndose en la computadora pueden estar ejecutando uno o ms procesos de tal manera que se estn realizando varias tareas. Un proceso puede definirse como un programa y toda la informacin que necesita para ejecutarse, lo que incluye aspectos tales como la memoria, los registros, etc. Un programa es un trozo de cdigo sin vida mientras que un proceso es un programa en ejecucin, lo que abarca algo mucho ms amplio. El sistema operativo debe tener los datos suficientes de cada proceso para poder ejecutarlo o para detener su ejecucin en cualquier momento. A esta informacin se le denomina descriptor de un proceso y puede definirse como la fotografa que tiene el sistema operativo del proceso. Un descriptor de proceso contendr fundamentalmente: valores actuales del contador de programa, de los registros y de las variables; archivos abiertos; etc. Gracias a los descriptores de proceso, el sistema operativo es capaz de interrumpir un proceso, ceder todos los recursos de la mquina a otro proceso entrante, y despus de un tiempo, volver a retomar el primero de los procesos justo por el punto por donde fue interrumpido. A esta operacin se la denomina cambio de contexto. Un cambio de contexto es una operacin considerablemente pesada, ya que supone guardar toda la informacin del proceso saliente y restaurar la del proceso entrante. El concepto de hilo de proceso (thread) nace con el fin de intentar separar dos aspectos de diseo: concurrencia y proteccin. Un hilo de proceso se puede definir como un hilo de

ejecucin dentro de un proceso. Los hilos de un mismo proceso comparten casi todo: ficheros abiertos, espacio de memoria, informacin de proteccin, temporizadores, seales, etc. Al mismo tiempo, cada hilo tiene tambin su parte privada: su propia pila, su propio contador de programa y su propio estado. En Java utilizamos la clase Thread para crear un nuevo thread:
public class EjemploProceso { public static void main( String arg[] ) { System.out.println( "Creando un thread" ); Thread t = new Thread(); System.out.println( "Iniciando el thread" ); t.start(); } }
Cdigo 1 (EjemploProceso.java)

Al ejecutar este cdigo, solo observaremos las frases:


Creando un thread Iniciando el thread

Si revisamos la clase Thread, tendremos lo siguiente:

Se observa que la clase Thread cuenta con el mtodo run() el cual es un mtodo vaco y no hace absolutamente nada. Para comprobar esto, haremos una modificacin al cdigo anterior:
public class EjemploProceso { public static void main( String arg[] ) { System.out.println( "Creando un thread" ); Thread t = new Thread(); System.out.println( "Iniciando el thread" ); t.start(); } public void run() { System.out.println( "Ejecutando el thread" ); } }
Cdigo 2 (EjemploProceso.java)

Al ejecutar este cdigo, solo observaremos las frases:


Creando un thread

Iniciando el thread Porqu no imprimi la frase Ejecutando el thread? Se debe a que creamos una instancia de la clase Thread por lo que al invocar al mtodo start() ejecut el mtodo run() de la clase Thread y no el mtodo propio de la clase EjemploProceso. Hay 2 maneras de crear un nuevo hilo de ejecucin (o thread): una es declarar a la clase como subclase de Thread e implementar el mtodo run(). La otra opcin es que la clase implemente a la interface Runnable. Para que se imprima la frase, hay que modificar el cdigo nuevamente, haciendo la opcin 1:
public class EjemploProceso2 extends Thread { public static void main( String arg[] ) { System.out.println( "Creando un thread" ); EjemploProceso2 t = new EjemploProceso2(); System.out.println( "Iniciando el thread" ); t.start(); } public void run() { System.out.println( "Ejecutando el thread" ); } }
Cdigo 3 (EjemploProceso2.java)

Creando un thread Iniciando el thread Ejecutando el thread

Ahora crearemos 2 procesos de una misma clase:


public class EjemploProceso3 extends Thread { public static void main( String args[] ) { // Para crear un Thread se debe extender a Thread // y crear objetos de tipo EjemploProceso3 System.out.println( "Creando thread" ); EjemploProceso3 t1 = new EjemploProceso3(); EjemploProceso3 t2 = new EjemploProceso3(); t1.setName( "proceso1" ); t2.setName( "proceso2" ); System.out.println( "Iniciando thread" ); t1.start(); t2.start(); } public void run() { System.out.println( "Ejecutando thread" ); } }
Cdigo 4 (EjemploProceso3.java)

Creando thread Iniciando thread Ejecutando thread Ejecutando thread Se observa que se imprime 2 veces la frase Ejecutando thread ya que se generaron 2 procesos por lo que ambos entran al mtodo o funcin run(). Ahora: Cmo saber cul de los 2 imprimi la frase? Con el nombre que se le da a cada proceso podemos saber cual de los 2 es el actual en ejecucin:
public class EjemploProceso4 extends Thread { public static void main( String args[] ) { // Para crear un Thread se debe extender a Thread // y crear objetos de tipo EjemploProceso4 System.out.println( "Creando thread" ); EjemploProceso4 t1 = new EjemploProceso4(); EjemploProceso4 t2 = new EjemploProceso4(); t1.setName( "proceso1" ); t2.setName( "proceso2" ); System.out.println( "Iniciando thread" ); t1.start(); t2.start();

} public void run() { System.out.println( "Ejecutando thread" ); for(int i=0; i <= 10; i++ ) { System.out.println( Thread.currentThread().getName() + : + i ); } } }
Cdigo 5 (EjemploProceso4.java)

Se observa que la salida no siempre es la misma.

Das könnte Ihnen auch gefallen