hacker


Ingresar con nombre de usuario, contraseña y duración de la sesión
| Portal Hacker | Editorial | Descargas | Ezine |
Inicio Ayuda Ingresar Registrarse
06 de Octubre de 2008, 01:52:09
Noticias: Nomina a tus preferidos para los pOrtal Hacker Awards 2008
Para ver este enlace Registrate o Inicia Sesion
aqui

+  Foros pOrtal Hacker
|-+  Programacion
| |-+  JAVA (Moderador: kamui23)
| | |-+  Programación multihilo
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Programación multihilo  (Leído 631 veces)
-Plaga-
NZ2
**
Desconectado Desconectado

Mensajes: 285


Ver Perfil
« : 07 de Mayo de 2008, 02:41:45 »

Bueno, ya había posteado esto en otro foro, es una introducción muy básica para que se hagan la idea de como manejar threads en java, para que el novato no se lie al leer esto por primera vez, si eres ya un experto, te puede parecer muy sencillo todo lo que digo aquí, recuerda que es una simple introducción en las limitadas palabras de este usuario que se apoda y hace llamar Plaga.

SUBPROCESOS

La animación es un uso ideal para los subprocesos,la forma en la que Java maneja más de una tarea de programación al mismo tiempo.

Un subproceso es parte de un programa que se configura para ejecutar sus propias condiciones mientras el resto del programa hace otra cosa.
A esto también se le llama multitarea debido a que el programa maneja mas de una tarea simultaneament e.

Los subprocesos son ideales para hacer cualquier cosa que tome mucho tiempo de procesamiento y está corriendo continuamente.

Por ejemplo la creación de dibujos repetidos para crear una animación.

Al poner la carga de un trabajo en un subproceso, usted deja libre al resto del programa para manejar otras cosas.

Suponga que tiene un programa gestor de descargas, usted pone su bonito programa para descargar algo y el programa solo se enfoca en descargar.
Usted no podra cerrar el programa para continuar otro día ya que no respondera hasta que termine su tarea actual, imagine que tiene un ancho de banda de 56Kbps.
Y el programa se demora unos 2 días para descargar, si quiere tener ese programa, no podra cerrar ese gestor, por 2 días e aquí donde entra el trabajo de los threads.


COMO ESCRIBIR PROGRAMAS CON SUBPROCESOS

Para usar un subproceso en un programa, puede hacer 5 modificaciones a su archivo de clases:

Modificar la declaración de esa clase agregando el texto implements Runnable.
Crear un objeto Thread que contenga el subproceso.
Sobreponer el método start() para crear el subproceso e iniciar su ejecución.
Sobreponer el metodo stop() para asignar null al subproceso en ejecución.
Cree un método run() que contenga las instrucciones que hagan que el applet corra continuamente.

La palabra clave implements es semejante a la palabra clave extends debido a que modifica la clase que está delcarada en la misma línea.
El siguiente es un ejemplo de una clase que utiliza tanto extendes como implements:
Código:
public class animation extends javax.swing.JApplet
implements Runnable {
//...
}
Aunque la declaración de clase a sido dividida en 2 líneas, todo lo que se encuentre desde la palabra clave public hasta la llave izquierda "{" define la clase.

Runnable es un tipo especial de clase llamada interfaz.
Una interfaz es una forma para que una clase herede métodos que de otro modo no podrían se heredados de sus superclases.

Estos métodos pueden ser implementados por cualquier clase que necesesite el comportamiento . En este ejemplo la interfaz Runnable es implementada por clases que trabajaran con subprocesos.
Runnable proporciona una definición para el método run(), el cual es llamado para iniciar un subproceso.

La clase Thread es parte del paquete estándar java.lang, por lo que no tiene que haber sido puesta disponible a traves de una instrucción import.
Iniciar la creación de un objeto Thread es tan sencillo como darle un nombre a un perro, como en la instrucción siguiente:
Código:
Thread runner;
Para nuestro ejemplo, crearemos el objeto en el método del applet start(). La variable runner tendrá el valor null hasta que el objeto sea creado realmente.

El lugar ideal para crearlo es el método start() del applet. El método siguiente verifica que haya sido creado el subproceso, si no es así lo crea:
Código:
public void start() {
if (runner == null) {
runner = new Thread(this);
runner.start();
}
}
La palabra clave this utilizada en el constructor Thread() es una forma de referirse al objeto en que se ejecuta el método, el applet en si mismo. Mediante this el applet se identifica como la clase que proporciona el comportamiento para ejecutar el subproceso.

Para ejecutar un subproceso, se llama a su método start(), como en esta instrucción del ejemplo anterior:
Código:
runner.start();
Cuando se llama al método start() del subprocesom, este llama al método run() de la clase que maneja el subproceso actualmente.

En este ejemplo, el applet implementa la interfaz Runnable y ha sido enlazado al objeto runner, a través de la palabra clave this. Se debe agregar un método run() al applet para que este funcione:

Código:
public void run() {
//Lo que hace el applet...
}

El método run() es el corazón de la aplicación con subprocesos.

Después de haber llenado el método run() con cualquier comportamiento que el subproceso necesite, el último paso para una aplicación con subprocesos es usar el método stop() para detener el subproceso.

La forma de detener un subproceso es establecer su objeto a null. Esto no detendrá al subproceso, pero usted diseña su método run() para que funcione y este en ejecución mientras su objeto Thread sea diferente a null.


La programación con subprocesos es mucho mas clara si se ve realmente en acción, aquí tengo un ejemplo de un applet animado que despliega la fecha y hora con actualizacione s constantes.

Esto crea un reloj digital como el que muestro en la imagen:



Un ejemplo sencillo, pero que muestra realmente como funciona la programación con subporcesos y aquí el código completo:
Código:
import java.awt.Graphics;
import java.awt.Font;
import java.util.Date;

public class DigitalClock extends java.applet.Applet implements Runnable {

Font theFont = new Font("TimesRoman", Font.BOLD, 24);
Date theDate;
Thread runner;

public void start() {
if (runner == null) {
runner = new Thread(this);
runner.start();
}
}

public void stop() {
if (runner != null) {
runner = null;
}
}

public void run() {
Thread thisThread = Thread.currentThread();
while (runner == thisThread) {
repaint();
try {
Thread.sleep(1000);
}catch (InterruptedException e) { }
}
}
public void paint(Graphics screen) {
theDate = new Date();
screen.setFont(theFont);
screen.drawString(" " + theDate.toString(), 10, 50);
}
}

Cualquier duda o sugerencia para mejorar, sera bien recibida Wink eso fue todo por ahora, bytes

by Plaga
En línea
CHR0N05
Colaborador
****
Desconectado Desconectado

Mensajes: 1,549


Chronos es Dios de Dioses!!...


Ver Perfil WWW
« Respuesta #1 : 07 de Mayo de 2008, 10:40:37 »

Encapsulamient o Huh
En línea

SOLO LOS QUE DEJAN DE INTENTAR, FRACASARÁN...

Para ver este enlace Registrate o Inicia Sesion


Para ver este enlace Registrate o Inicia Sesion
Torneo Matemático Fases 2 + UPDATE


Para ver este enlace Registrate o Inicia Sesion
Convocatoria E-Zine HxS #1
-Plaga-
NZ2
**
Desconectado Desconectado

Mensajes: 285


Ver Perfil
« Respuesta #2 : 08 de Mayo de 2008, 06:54:56 »

Encapsulamient o Huh
a que te referís cuando decís encapsulamient o, según yo tengo entendido en OOP el encapsulamient o es todo eso de agrupar atributos (variables o constantes) y métodos en una clase, la visibilidad de las clases, métodos y variables.
« Última modificación: 08 de Mayo de 2008, 07:09:13 por -Plaga- » En línea
CHR0N05
Colaborador
****
Desconectado Desconectado

Mensajes: 1,549


Chronos es Dios de Dioses!!...


Ver Perfil WWW
« Respuesta #3 : 08 de Mayo de 2008, 08:46:33 »

a que te referís cuando decís encapsulamient o, según yo tengo entendido en OOP el encapsulamient o es todo eso de agrupar atributos (variables o constantes) y métodos en una clase, la visibilidad de las clases, métodos y variables.

Pero el Users, no tiene idea lo que hace el programa por dentro... asi que por ello me imaginé que era una especie de encapsulamient o del programa...

Saludos..



Ps. Tendré que estudiar muuuuucho más... Tongue
En línea

SOLO LOS QUE DEJAN DE INTENTAR, FRACASARÁN...

Para ver este enlace Registrate o Inicia Sesion


Para ver este enlace Registrate o Inicia Sesion
Torneo Matemático Fases 2 + UPDATE


Para ver este enlace Registrate o Inicia Sesion
Convocatoria E-Zine HxS #1
Páginas: [1] Ir Arriba Imprimir 
« anterior próximo »
Ir a:  


Ingresar con nombre de usuario, contraseña y duración de la sesión

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC hacker

Juegos gratis - Articulos PHP - Juegos - Trucos - Letras - Juegos - Juegos Online