Arquitecturas cliente/servidor

Documentos relacionados
Tema 6. Threads: programas multitarea

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).

Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo

Guillermo Román Díez

Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución.

Sincronización de Threads

Programación concurrente

Tema III. Multihilo. Desarrollo de Aplicaciones para Internet Curso 12 13

Programación Orientada a Eventos

Programación concurrente en Java

CAPÍTULO 2. PROCESOS VS. HILOS

Modelo de Objetos Distribuidos

de Gran Canaria Centro de Tecnología Médica Programación Concurrente

Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente.

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Examen Teórico Convocatoria de Junio de 2012

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008

Tema 6: Clases. Índice

1 HILOS (THREADS) EN JAVA

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez

Introducción a Java. Introducción a Java. Programación I

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.

18. Interfaces Declaración de una interfaz

Java y JVM: programación concurrente. Adolfo López Díaz

Programación Concurrente y Distribuida Ingeniería Informática Facultad de Ciencias Universidad de Cantabria.

Si bien hay gran cantidad de excepciones, todas derivan de la clase Exception, además de las excepciones ya manejadas, se pueden crear propias.

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Federico Peinado

Derechos de Acceso: COMPOSICION

Multienhebrado en Java Un toque de sincronización Transporte en Java Ejemplo conjunto

Ejercicio 1 (proyecto prlistas, paquete listas)

Si bien Pascal-FC no trae algunas de las características de Pascal como:

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez

Programación orientada a objetos III

Procesamiento paralelo con hilos de Java

Introducción a la Programación Orientada a Objetos

Lenguaje de programación con JAVA

1. Cuántas sentencias hay en la secuencia principal del siguiente programa?

Multitarea en Java. Rafa Caballero - UCM

Java en 2 horas. Rodrigo Santamaría

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Programación concurrente y semáforos en Java

PROGRAMACIÓN EN JAVA

CONCEPTO DE INTERFACE Y HERENCIA MÚLTIPLE EN JAVA. IMPLEMENTS. EJEMPLOS Y DIAGRAMAS DE CLASES. (CU00696B)

5. Sentencias selectivas o condicionales

PROGRAMACION CONCURRENTE

Concurso: Cuánto sabes de JAVA?

Ejercicios de Hilos. Índice

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFAZ CLONEABLE DE JAVA. MÉTODO CLONE() PARA CLONAR OBJETOS. (CU00912C)

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

Java: Programación Multithread

PRÁCTICO 3. Comprender la administración de procesos e hilos de los sistemas operativos Comprender la tarea y la elección de un planificador.

7. Otras sentencias Sentencia break. 84 A. García-Beltrán y J.M. Arranz

Concurrencia en Java

12. Tipos de atributos

Concurrencia en Android LSUB, GYSC, URJC

Tema 2: Aplicaciones Multihilo, Cliente Servidor

Modulo 11. Clases y Objetos en Java

Ingeniería del Software Separación entre Presentación y Lógica del Negocio

Concurrencia. Primitivas IPC con bloqueo

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Tema 1. Herencia y Polimorfismo

PARTE II PROGRAMACION CON THREADS EN C

Programación Concurrente en Java: Threads

Estructura de datos y Programación

Clases y herencia. FJP Unidad 8. Diseño de clases

Concurrencia en Java

Curso Programación Java JSE 7

Programación orientada a objetos

Interfaces. Amparo López Gaona. Septiembre de Amparo López Gaona () Interfaces Septiembre de / 1

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Excepciones. Excepciones

Programación multihebra

Práctica 2: Java Remote Method Invocation (RMI)

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Objetivos. El alumno empleará el concepto de excepción en la programación orientada a objetos para el manejo de errores de ejecución.

BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

IMPLEMENTACIÓN DE REDES DE PETRI CON TIEMPO EN JAVA

Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Programación Concurrente en Java

Concurrencia en Java

! Fundamentos de la POO. ! Comportamiento y estado. ! Clases y objetos en Java

Estructuras de control selectivas

Herencia y Polimorfismo

JAVA 7 Los fundamentos del lenguaje Java

Práctica 4 Concurrencia en Java

Código Fuente. Creamos en C:\ una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4

Objetivos y Temario CURSO JAVA 7

Transcripción:

Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor 1

Creación de Sockets Cliente/Servidor Sockets en TCP Concepto de Hilos Definición de DAEMON Sockets en UDP 2

THREADS 3

Qué es un thread? Un thread es un flujo secuencial de control dentro de un programa. Un thread (hilo o contexto de ejecución) es una secuencia de instrucciones en ejecución. 4

Threads El concepto de thread es similar al de proceso, excepto que múltiples thread pueden ejecutarse dentro del mismo proceso, compartiendo los datos y el código de programa. La mayoría de los programas se pueden considerar como de thread único, es decir, existe un único camino de ejecución, el programa tiene un inicio, se realizan una serie de cálculos y se finaliza. 5

Threads Un thread es un proceso ligero (más rápido y económico) Generalmente un proceso (padre) genera diversos threads (procesos-hijo), formando así un árbol de procesos Los programas multihilo pueden tener varios flujos de control en diferentes partes del código ejecutándose "simultáneamente". 6

Cambio de contexto La alternación de threads que tiene que hacer el sistema operativo es escaso. Entendiendo como tal el cambio que deberá realizar el sistema para colocar un proceso en ejecución y colocar el que se está ejecutando en espera. Este mecanismo se denomina cambio de contexto. 7

Características de los threads Cada thread tiene su propia pila y sus propios valores para sus variables, por lo que se define su estado de ejecución, así como el flujo de control. Permiten un sencillo manejo de la memoria compartida, en datos y variables, así como una forma práctica de comunicación entre ellos. 8

Creación de un Thread Para crear un nuevo thread es necesario generar una instancia de la clase java.lang.thread. Un objeto Thread representa un verdadero hilo en ejecución para el intérprete de Java y es utilizado para el control y sincronización durante su aplicación. Mediante Thread, podemos dormir el hilo, ejecutarlo, interrumpirlo, etc. 9

Implementación Hay dos alternativas posibles : Declarar el hilo con una clase extendida de la clase java.lang.thread, mediante la herencia. Implementar la interfaz java.lang.runnable. La implementación de la interfaz java.lang.runnable es la forma habitual de crear threads, ya que proporciona una forma de abstracción a la hora de definir una clase. 10

Interface Runnable Un objeto que desee utilizar los métodos que proporciona la clase java.lang.thread se puede declarar mediante la implementación de la interfaz java.lang.runnable, que simplemente se define de la siguiente manera descrita: public interface Runnable { abstract public void run(); } 11

El método run( ) El inicio de cada hilo quedara definido mediante la ejecución del método run() para cada objeto creado, que contendrá el código que se va a ejecutar. run() es un método público, no acepta parámetros y no lanza ninguna excepción. Cada objeto de esta clase sería Runnable y por tanto se podrá utilizar con la clase java.lang.thread. 12

Implementación de la interfaz Runnable Como se ha descrito, la clase debe implementar la interfaz Runnable, por lo que para empezar,la clase debe tener la siguiente definición: public class mithread implements Runnable{ } 13

Funcionamiento run( ) y start( ) Es posible indicar que comience la ejecución del hilo de ejecución mediante el uso de los métodos que proporciona la clase java.lang.thread. El método start() es el encargado de llamar al método run(). El método start() de java.lang.thread() arranca el objeto tipo Thread como tal. 14

Ejemplo: Solo queda utilizar la clase como un verdadero objeto tipo Thread. Por lo tanto, se genera un objeto tipo java.lang.thread y se pasa un objeto del tipo de la clase generada: public class Mensaje implements Runnable{ public void run(){ System.out.println( Hola mundo ); } public static void main(string args[]){ Mensaje mihilo = new Mensaje(); new Thread(miHilo).start(); } } 15

Herencia El otro método para la creación de hilos consiste en heredar un objeto de la clase java.lang.thread. Se trata de una forma más sencilla que la anterior, ya que la propia clase java.lang.thread contiene el método run() que ejecuta el código. Para que la clase pueda ser ejecutada como un hilo, se hereda de la clase java.lang.thread y se escribe el código dentro del procedimiento run(). 16

Sintaxis La clase java.lang.thread redefine el método run() class mihilo extends Thread { public void run () { // Código a ejecutar } } 17

Creación y ejecución La creación del hilo y su ejecución sería de la forma siguiente: mihilo mio = new mihilo(); mio.start(); Como se observa, la ejecución también se realiza con la llamada al método start() 18

Observaciones (Herencia) La implementación de los threads mediante este método es mucho más fácil de utilizar. Si se quiere crear un thread que herede de otra clase que no se java.lang.thread, como por ejemplo Applet, no se podrá realizar. Cabe señalar que la clase Thread en sí implementa a la interfaz Runnable, hay un par de constructores de la clase Thread que reciben objetos tipo Runnable 19

Estados de un thread Durante el ciclo de vida de un thread se pueden encontrar diferentes estados. 20

Algunos métodos de la clase Thread void start(): usado para iniciar el cuerpo de la thread definido por el método run(). void sleep(tiempo): pone a dormir una thread por un tiempo mínimo especificado. void join(): usado para esperar por el término de la thread, por ejemplo por término de método run(). void yield(): Mueve el thread desde el estado de en ejecución al final de la cola de procesos en espera por la CPU, en otras palabras cede el control del microprocesador a otro hilo. boolean isalive(): Indica si el thread esta vivo o no. 21

Distribución del procesador Por defecto los hilos con prioridad igual se ejecutan con el sistema round robin. Si un thread comienza a ejecutarse, lo seguirá haciendo hasta que ocurra alguna de las siguientes circunstancias: Se llame al método sleep() o wait() Se espere una entrada/salida Si se ejecuta un método sincronizado. Se llame al método yield() 22

Prioridades de los Threads Java garantiza de cierta manera la gestión de los threads en cuanto al nivel de prioridad asignado a cada uno de ellos, de tal forma que cada hilo tiene una prioridad asociada. Si un hilo con mayor prioridad pasa a activo, que el hilo que se esta ejecutando, éste pasa a dormido. 23

Manejo de Prioridades La prioridad por defecto de un thread está definida por la variable estática Thread.NORM_PRIORITY = 5 Existen otras dos variables estáticas definidas en el paquete java.lang.thread public static final int MAX_PRIORITY 10 public static final int MIN_PRIORITY 1 public static final int NORM_PRIORITY 5 24

class MiHilo extends Thread { String mensaje; MiHilo( String cadena) { mensaje = cadena ; } public void run() { while(true) { System.out.println( mensaje ); } } public static void main( String args[] ) { new MiHilo("K1 ").start(); new MiHilo("K2 ").start(); MiHilo obj2 = new MiHilo("L "); obj2.setpriority( Thread.NORM_PRIORITY+1); obj2.start(); } } Salida: K1 K1 K1 K1 K1 K2 L K1 K2 L K1 K2 L K1 K2 L L Ejemplo 25

Definición de DAEMON Es un tipo especial de proceso que se ejecuta de forma: Continua (infinitamente). Transparente para el usuario. Simultánea con otros procesos, por eso suelen encontrarse en sistemas multitarea. 26

Además No disponen de una interfaz directa con un humano, ya sea gráfica o textual. No hacen uso de la entradas y salidas estándar para comunicar errores o registrar su funcionamiento. Por el contrario usan archivos del sistema en zonas especiales (/var/log/) o utilizan otros demonios especializados en dicho registro como el syslogd 27

Por ejemplo: httpd demonios "cronológicos" para mantenimiento del sistema en segundo plano. proceso de sistema de protección en tiempo real de antivirus. proceso de protección de firewall de capa de red/aplicación. 28

Programas Demonios Un thread demonio (daemon) es un thread de baja prioridad que consta de un bucle infinito y se suele utilizar para prestar servicios cuando se necesite, por ejemplo, refresco de memoria, mostrar imágenes, etc. Java utiliza un thread daemon, el recolector de basura para realizar todas las gestiones sobre la creación y destrucción de los objetos en memoria. Un thread demonio se declara de la siguiente manera: thread.setdaemon(); Y se puede comprobar si un thread es tipo "demonio" mediante el siguiente método: isdaemon(); 29

Observaciones sobre threads La diferencia entre los threads normales y los demonios es que Java no espera la muerte de los demonios para detener su ejecución Otra característica consiste en que cualquier thread que se crea desde otro que es demonio también es un thread demonio. 30