Inicio / Wikis / Tutoriales / Tutorial de Java - Flujo en Programas

Tutorial de Java - Flujo en Programas

(122 opiniones)
Tutorial creado por
29 de Agosto de 2005
Java

Programas de flujo único

Un programa de flujo único o mono-hilvanado (single-thread) utiliza un único flujo de control (thread) para controlar su ejecución. Muchos programas no necesitan la potencia o utilidad de múltiples flujos de control. Sin necesidad de especificar explícitamente que se quiere un único flujo de control, muchos de los applets y aplicaciones son de flujo único.

Por ejemplo, en nuestra aplicación estándar de saludo:

public class HolaMundo {
     static public void main( String args[] ) {
         System.out.println( "Hola Mundo!" );
         }
     }
 

Aquí, cuando se llama a main(), la aplicación imprime el mensaje y termina. Esto ocurre dentro de un único thread.

Programas de flujo múltiple

En nuestra aplicación de saludo, no vemos el thread que ejecuta nuestro programa. Sin embargo, Java posibilita la creación y control de threads explícitamente. La utilización de threads en Java, permite una enorme flexibilidad a los programadores a la hora de plantearse el desarrollo de aplicaciones. La simplicidad para crear, configurar y ejecutar threads, permite que se puedan implementar muy poderosas y portables aplicaciones/applets que no se puede con otros lenguajes de tercera generación. En un lenguaje orientado a Internet como es Java, esta herramienta es vital.

Si se ha utilizado un navegador con soporte Java, ya se habrá visto el uso de múltiples threads en Java. Habrá observado que dos applet se pueden ejecutar al mismo tiempo, o que puede desplazar la página del navegador mientras el applet continúa ejecutándose. Esto no significa que el applet utilice múltiples threads, sino que el navegador es multithreaded.

Las aplicaciones (y applets) multithreaded utilizan muchos contextos de ejecución para cumplir su trabajo. Hacen uso del hecho de que muchas tareas contienen subtareas distintas e independientes. Se puede utilizar un thread para cada subtarea.

Mientras que los programas de flujo único pueden realizar su tarea ejecutando las subtareas secuencialmente, un programa multithreaded permite que cada thread comience y termine tan pronto como sea posible. Este comportamiento presenta una mejor respuesta a la entrada en tiempo real.

Vamos a modificar nuestro programa de saludo creando tres threads individuales, que imprimen cada uno de ellos su propio mensaje de saludo, MultiHola.java:

// Definimos unos sencillos threads. Se detendrán un rato
 // antes de imprimir sus nombres y retardos
 
 class TestTh extends Thread {
     private String nombre;
     private int retardo;
 
     // Constructor para almacenar nuestro nombre
     // y el retardo
     public TestTh( String s,int d ) {
         nombre = s;
         retardo = d;
         }
 
     // El metodo run() es similar al main(), pero para
     // threads. Cuando run() termina el thread muere
     public void run() {
         // Retasamos la ejecución el tiempo especificado
         try {
             sleep( retardo );
         } catch( InterruptedException e ) {
             ;
             }
 
         // Ahora imprimimos el nombre
         System.out.println( "Hola Mundo! "+nombre+" "+retardo );
         }
     }
 
 public class MultiHola {
     public static void main( String args[] ) {
         TestTh t1,t2,t3;
 
         // Creamos los threads
         t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) );
         t2 = new TestTh( "Thread 2",(int)(Math.random()*2000) );
         t3 = new TestTh( "Thread 3",(int)(Math.random()*2000) );
 
         // Arrancamos los threads
         t1.start();
         t2.start();
         t3.start();
         }
     }
 

Y ya mßs como espectáculo que otra cosa, aunque también podemos tomarlo por el lado ilustrativo, vemos a continuación la elecución del applet Figuras.java que muestra un montón de círculos, cada uno de ellos ejecutándose en un thread diferente y con distinta prioridad cada uno de ellos. La clase Circulo es la que se utiliza para lanzarla todas las veces que se quiere, de tal forma que cada uno de los círculos presentes en el applet son instancias de la misma clase Circulo.

Tu navegador no entiende la marca <APPLET>. La imagen siguiente es la reproducción de la apariencia del applet en pantalla:
Applet Figuras
Valora este capítulo: (122 opiniones)
Autor y licencia de 'Tutorial de Java - Flujo en Programas'
Agustín Froufe Extraído de: http://www.publispain.com/supertutoriales/

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Opiniona sobre 'Tutorial de Java - Flujo en Programas' (122)

Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.

Opina sobre este tutorial



* Valoración:
* Nombre:
* Correo electrónico:
* Título:
* Comentario:

Wikis relacionados con 'Tutorial de Java - Flujo en Programas'

Este documento recopila la información de importantes autores en cuanto a programas de investigación se... Más »
Apoyado en el análisis de redes como una técnica de modelación matemática se muestra una... Más »
El Estado de Flujos de Efectivo se diseña con el propósito de explicar los movimientos... Más »
La idea es dar una guía ordenada para el estudio de este lenguaje, muy poderoso... Más »
Este tutorial presenta los conceptos básicos de líneas de transmisión (Transmission lines), así como una... Más »
¿Estás seguro de que deseas eliminar este capítulo?