PDF de programación - Manual de Java

Imágen de pdf Manual de Java

Manual de Javagráfica de visualizaciones

Publicado el 20 de Abril del 2018
1.186 visualizaciones desde el 20 de Abril del 2018
434,3 KB
43 paginas
Creado hace 10a (13/02/2014)
MANUAL DE JAVA



Autor:

Lic. Jorge Herrero

Introducción a Threads



¿Qué es un Thread? (Hilo de Ejecución).

Un concepto fundamental en programación es manejar más de una tarea a la vez.

Muchos problemas de programación requieren que el programa pueda detener lo que esté

haciendo, tratar con algún otro problema y regresar al proceso principal.

Dentro de un programa, las partes que corren separadamente se llaman hilos (Thread) y

el concepto general se llama Multithreading.

Ordinariamente, los hilos son una manera de asignar el tiempo de un solo procesador.

Pero si el sistema operativo apoya procesadores múltiples, cada hilo puede asignarse a un

procesador diferente y ellos pueden correr realmente en paralelo. Una de las características

convenientes de Multithreading es que el programador no necesita preocupar sobre si existe

uno o más procesadores. El programa es lógicamente dividido en hilos y si la maquina tiene más

de un procesador entonces el programa corre más rápidamente, sin necesidad de ajuste

especial.



¿Qué es un proceso?

Un proceso es un programa ejecutándose en forma independiente y con un espacio

propio de memoria. Un Sistema Operativo multitarea es capaz de ejecutar más de un proceso

simultáneamente. Un Thread o hilo es un flujo secuencial simple dentro de un proceso. Un

único proceso puede tener varios hilos ejecutándose. Por ejemplo, los programas Firefox,

Internet Explorer, Google Chrome serían un proceso, mientras que cada una de las ventanas

y/o pestañas que se pueden tener abiertas simultáneamente trayendo páginas HTML estaría

formada por al menos un (1) hilo.



Un sistema multitarea da realmente la impresión de estar haciendo varias cosas a la vez

y eso es una gran ventaja para el usuario. Sin el uso de hilos hay tareas que son prácticamente

imposibles de ejecutar, particularmente las que tienen tiempos de espera importantes entre

etapas.

Los Threads o hilos de ejecución permiten organizar los recursos de la PC de forma que

pueda haber varios programas actuando en paralelo. Un hilo de ejecución puede realizar

cualquier tarea que pueda realizar un programa normal y corriente. Bastara con indicar lo que

tiene que hacer en el método run(), que es el que define la actividad principal de las tareas.



¿Qué significa Multi-Threading?

La Máquina Virtual Java (JVM) es un sistema multi-thread. Es decir, es capaz de ejecutar

varias secuencias de ejecución (programas) simultáneamente.

La programación multithreading (multi-hilo) permite la ocurrencia simultánea de varios

flujos de control. Cada uno de ellos puede programarse independientemente y realizar un

trabajo, distinto, idéntico o complementario, a otros flujos paralelos.

Un procesador ejecuta las instrucciones secuencialmente una después de la otra. A esta

ejecución secuencial de instrucciones se le llama un Execution Thread (Hilo de Ejecución).

Multithreading es cuando se están ejecutando varios hilos simultáneamente.

Si un procesador ejecuta las instrucciones secuencialmente, una después de la otra

¿Cómo hace para ejecutar varios hilos simultáneamente? No puede hacer, pero puede simular

que lo hace.



CREACIÓN DE THREADS



Alternativas de creación

Existen dos modos de crear Hilos en Java:

 Extender la clase Thread



Implementar la interface Runnable



Creación a través de la clase Thread

 Crear una nueva clase que hereda la clase Thread y redefinir el método run(). (Este

método contendrá el código que va a ser ejecutado por el hilo)

 Luego se instancian objetos de la clase derivada y se llama a su método start(). (Así se

arrancan hilos que ejecutan el código contenido en el método run())



El paquete java.lang define una clase Thread que sirve para crear hilos.

Veamos un ejemplo:

/*

Esta clase define el prototipo para presentar mensajes en pantalla cada x segundos

*/

import java.awt.*;

import java.lang.*;

//definimos la clase Hilo derivada de la clase Thread

//así podremos instanciar todos los hilos que queramos

class Hilo extends Thread{

private String s; //para almacenar los mensajes

private int pausa; //pausa antes de presentar el mensaje

//Constructor, se indica el mensaje y la pausa

public Hilo(String m, int p){

s = m;

pausa = p;

}

//Definimos el método run() similar al main()pero para Hilos

//recordar el contenido de Mensaje.java

public void run(){

do{

try{

sleep (pausa*1000);

}catch (InterruptedException e){

;

}

System.out.println(s);

}while (true);

}

}



public class Mensaje{

public static void main(String args[]){

Hilo m1,m2; //instanciamos dos objetos de la clase Hilo

String s1,s2;

s1 = new String("Prueba del 1er Hilo");

s2 = new String("Prueba del 2do Hilo");

//creamos los hilos m1 y m2

m1 = new Hilo(s1,3);

m2 = new Hilo(s2,5);

//arrancamos los hilos

m1.start();

m2.start();

}

}



Creación a través de la interfaz Runnable

El otro modo de crear hilos es mediante la implementación de la interfaz Runnable. La

razón para utilizar otro método para la creación de hilos es que nos puede interesar heredar de

la clase Applet y a la vez emplear los servicios de threads.

En Java no está permitida la herencia múltiple, al menos de clases, la forma de

solucionar este problema es utilizando una interface (lo que sería una clase abstracta pura en

C++) que permita que las clases que implementa la interface puedan ser utilizada por la clase

Thread como base para crear un hilo, la interfaz utilizada se denomina Runnable.

Ya hemos visto la solución concurrente que dimos al problema inicial de presentar en

pantalla dos mensajes sin utilizar applets, utilizamos la clase Hilo derivada de Thread y

mensaje.java como programa principal que hacía uso de dicha clase.

Para poder hacer uso de la concurrencia en un applet es necesario incluir la interfaz

Runnable, tal como hicimos en la solución concurrente con appletes, donde utilizamos la clase

HiloApplet y el applet AppletConcurrent.

Podemos utilizar dos formas de crear Hilos utilizando Applets:

Una consiste en crear clases extendidas de Thread, que contendrá el código de

ejecución del hilo, donde pasamos al constructor una referencia al applet que crea los hilos

mediante this, esto es lo que hemos hecho en AppletConcurrent.java

hilo1 = new HiloApplet(this,pausa1);

hilo2 = new HiloApplet(this,pausa2);

Otra forma consiste en colocar el código de ejecución del hilo en el método run() del

applet y crear los hilos como una instancia de la clase Thread. Esto es lo que hemos hecho en el

applet appletConcurrent2.java



Ejemplo:

public class CreateThreadRunnableExample implements Runnable{



public void run(){



for(int i=0; i < 5; i++){



System.out.println("Hijo Hilo : " + i);





}

try{



}

Thread.sleep(50);

catch(InterruptedException ie){

System.out.println("Hijo del hilo interrumpido! " + ie);



}



System.out.println("Hijo del hilo finalizada!");

}



public static void main(String[] args) {



t.start();

for(int i=0; i < 5; i++){

System.out.println("Main thread : " + i);

try{



}

Thread.sleep(100);

catch(InterruptedException ie){

System.out.println("Child thread interrupted! " + ie);



}



}

System.out.println("Main thread finished!");

MANEJO DE THREADS



}



}



El método start()

Es usado para iniciar el cuerpo del hilo definido por el método run().

Ejemplo:

MiHilo elHilo = new MiHilo();

elHilo.start();



El método run()



Es usado para definir la tarea concurrente a realizar por el (los) hilo(s).

Ejemplo:

public void run() {

// mientras continuar ...

while (continuar) {

String texto = leeDelTeclado();

enviaAlServidor(texto);

}

}



El método join()

Es usado para esperar por el término del hilo sobre la cual el método es invocado, por

ejemplo por término de método run(), “se forma en una cola de espera de otro hilo”.

Ejemplo:

Thread t = new Thread();

t.start();

t.join();



El método yield()

Se encargar de mover un hilo desde el estado de corriendo al final de la cola de procesos

en espera por la CPU.

Ejemplo:

public class CD_PrimerThread extends Thread {

public void run() {

while(true) {

System.out.print("Primer Hilo ");

yield();

}

}

}

public class CD_SegundoThread extends Thread {

public void run() {

while(true) {

System.out.print("Segundo Hilo ");

yield();

}

}

}



El método sleep()

Se encargar de poner a dormir un hilo por un tiempo mínimo especificado.

Ejemplo:

public class Counter

{

public static void main(String[]args)

{

int i;

for (i = 0; i <= 10; i++)

{

Thread.sleep(1000);

System.out.println(i);

}

System.out.println("Espere un momento por favor…");

}

}



El método suspend()

Se encarga de suspender la ejecución de un hilo temporalmente.

Ejemplo:

Thread t = new Thread();

t.suspend();
  • Links de descarga
http://lwp-l.com/pdf10536

Comentarios de: Manual de Java (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad