excepciones - hilos

Upload: georgina-aruquipa

Post on 13-Jul-2015

274 views

Category:

Documents


1 download

TRANSCRIPT

I.S.E.I.T.

Manejo de Excepciones

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

IntroduccinExiste una regla de oro en el mundo de la programacin: en los programas ocurren errores. Esto es sabido. Pero qu sucede realmente despus de que ha ocurrido el error? Cmo se maneja el error? Quin lo maneja?, Puede recuperarlo el programa?

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Manejo de Errores utilizando Excepciones El lenguaje Java utiliza excepciones para proporcionar capacidades de manejo de errores. En esta leccin aprenders qu es una excepcin, cmo lanzar y capturar excepciones, qu hacer con una excepcin una vez capturada, y cmo hacer un mejor uso de las excepciones heredadas de las clases proporcionadas por el entorno de desarrollo de JavaDoc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Capturar y Manejar Excepciones El Bloque try El primer paso en la escritura de una manejador de excepciones es poner la sentencia Java dentro de la cual se puede producir la excepcin dentro de un bloque try. Se dice que el bloque try gobierna las sentencias encerradas dentro de l y define el mbito de cualquier manejador de excepciones (establecido por el bloque catch subsecuente) asociado con l.Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Capturar y Manejar Excepciones(II) Los bloques catch Despus se debe asociar un manejador de excepciones con un bloque try proporcionndole uno o ms bloques catch directamente despus del bloque try.

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Capturar y Manejar Excepciones(III) El bloque finally El bloque finally de Java proporciona un mecanismo que permite a sus mtodos limpiarse a si mismos sin importar lo que sucede dentro del bloque try. Se utiliza el bloque finally para cerrar ficheros o liberar otros recursos del sistema.Laboratorio de Programacin V

Doc. Lic. Georgina Aruquipa

El bloque Try El primer paso en la construccin de un manejador de excepciones es encerrar las sentencias que podran lanzar una excepcin dentro de un bloque try. En general, este bloque se parece a esto:try { sentencias Java }

El segmento de cdigo etiquetado sentencias java est compuesto por una o ms sentencias legales de Java que podran lanzar una excepcin.Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Los bloques Catch Como se vi, la sentencia try define el mbito de sus manejadores de excepcin asociados. Se pueden asociar manejadores de excepcin a una sentencia try proporcionando uno o ms bloques catch directamente despus del bloque try:try { . . . } catch ( . . . ) { . . . } catch ( . . . ) { . . . } . . .

No puede haber ningn cdigo entre el final de la sentencia try y el principio de la primera sentencia catch. La forma general de una sentencia catch en Java es esta:catch (AlgunObjetoThrowable nombreVariable) { Sentencias Java }

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Los bloques Catch (II) No puede haber ningn cdigo entre el final de la sentencia try y el principio de la primera sentencia catch. La forma general de una sentencia catch en Java es esta:catch (AlgunObjetoThrowable nombreVariable) { Sentencias Java } Como puedes ver, la sentencia catch requiere un slo argumento formal. Este argumento parece un argumento de una declaracin de mtodo. El tipo del argumento AlgunObjetoThrowable declara el tipo de excepcin que el manejador puede manejar y debe ser el nombre de una clase heredada de la clase Throwable definida en el paquete java.lang. (Cuando los programas Java lanzan una excepcin realmente estn lanzado un objeto, slo pueden lanzarse los objetos derivados de la clase Throwable)Laboratorio de Programacin V

Doc. Lic. Georgina Aruquipa

El bloque Finally El paso final en la creacin de un manejador de excepcin es proporcionar un mecanismo que limpie el estado del mtodo antes (posiblemente) de permitir que el control pase a otra parte diferente del programa. Se puede hacer esto encerrando el cdigo de limpieza dentro de un bloque finally. Es realmente necesaria la sentencia finally? La primera necesidad de la sentencia finally podra no aparecer de forma inmediata. Los programadores se preguntan frecuentemente "Es realmente necesaria la sentencia finally o es slo un aadido para mi Java?" En particular los programadores de C++ dudan de la necesidad de esta sentencia porque C++ no la tiene.Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

I.S.E.I.T.

Hilos - Threads

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Introduccin Todos los programadores estn familiarizados con la escritura de programas secuenciales. T probablemente hayas escrito un programa que muestre "Hola Mundo!", o que ordene una lista de nombres, o que calcule la lista de nmeros primos. Estos son programas secuenciales: cada uno tiene un principio, una secuencia de ejecucin y un final. En un momento dado durante la ejecucin del programa hay un slo punto de ejecucin.Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Introduccin concurrencia Los ordenadores y sistemas operativos modernos permiten la ejecucin de varios programas simultneamente. Es lo que se denomina multitarea. Realmente un ordenador con un solo procesador no puede ejecutar varias tareas a la vez, sin embargo los sistemas operativos actuales son capaces de ejecutar varios programas simultneamente aunque slo se disponga de una CPU. Esto lo consiguen repartiendo el tiempo de CPU entre las distintas tareas y aprovechando las pausas que se producen en unas para permitir que prosiga la ejecucin de las otras. En ordenadores con dos o ms procesadores la multitarea es real ya que cada uno puede ejecutar una tarea distinta aunque est limitada al nmero de procesadores disponibles.Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Definicin de Proceso Un proceso es un programa ejecutndose de manera independiente y con un espacio propio de memoria. Un sistema operativo multitarea es capaz de ejecutar varios procesos de forma simultnea. Los recursos que asigna el sistema operativo a un proceso son independientes de los recursos que use cualquier otro proceso.

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Definicin de Hilo Un hilo o thread es un flujo secuencial simple dentro de un proceso. Un proceso puede tener varios hilos ejecutndose tambin simultneamente. Esos hilos s comparten los recursos que proporcion el sistema operativo al proceso que los ha creado, as, mientras los procesos son independientes unos de otros, los hilos s pueden interactuar entre ellos.Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Beneficios Gracias a los sistemas multitarea los procesadores pueden aprovecharse mejor y as mejorar el rendimiento del sistema. En un sistema que no fuera multitarea, cuando un programa ejecutara una operacin lenta como por ejemplo una lectura de disco, el procesador estara detenido a la espera de la respuesta de esa operacin de entrada salida y por lo tanto se estara desaprovechando el uso del procesador. En el caso de un sistema multitarea cuando un proceso realiza una operacin que requiere la espera del procesador, el sistema operativo se encarga de permitir que otro proceso se ejecute para aprovechar el tiempo que estara la CPU detenida.Laboratorio de Programacin V

Doc. Lic. Georgina Aruquipa

Creacin de Threads Los hilos en Java son objetos descendientes de la clase Thread (java.lang.Thread). Hay dos formas distintas para crear threads. La primera es heredar directamente de la run() clase Thread y sobrecargar el mtodo run Y la segunda es crear un thread a partir de un objeto de una clase que implemente la interfaz Runnable (java.lang.Runnable java.lang.Runnable).Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Creacin a partir de un Thread La forma ms sencilla de crear un hilo es extendiendo de la clase Thread

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Creacin a partir de un Thread En el constructor se utiliza un String para darle un nombre al thread creado y mediante la llamada a super() se llama al constructor de la super-clase Thread. Tambin se redefine el mtodo run() de la clase Thread para que realice alguna accin. Para ejecutar un hilo creado de esta forma se debe crear un objeto de esta clase y despus realizar una llamada al mtodo start() definido en la clase Thread que se encarga de llamar al mtodo run() y poner en marcha el hilo.

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Creacin implementando la interfaz Runnable (I) Esta segunda forma tambin requiere que se run(), implemente el mtodo run() pero adems es necesario crear un objeto de la clase Thread para lanzar la ejecucin del nuevo hilo. La clase Thread tiene un constructor que recibe como parmetro un objeto que implementa la interfaz Runnable y permite que ese objeto se convierta en un hilo. Despus, cuando thread, invoquemos al mtodo start() del thread ste se encargar de realizar la llamada al mtodo run() del objeto que implementa Runnable Runnable.Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Creacin implementando la interfaz Runnable (II)

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Creacin implementando la interfaz Runnable (III) El siguiente cdigo crea un nuevo thread y lo ejecuta por este segundo procedimiento:

Este mtodo se utiliza normalmente cuando estamos a obligados a extender de una clase y por lo tanto no podemos extender de Thread. ThreadDoc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Ejecucin de varios hilos de forma simultnea

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Ejecucin de varios hilos de forma simultnea La salida del programa ser algo parecido a esto: Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo Hilo 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, pasada pasada pasada pasada pasada pasada pasada pasada pasada pasada pasada pasada pasada pasada pasada pasada pasada pasada pasada pasada 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Ejecucin de varios hilos de forma simultnea Viendo el resultado obtenido podemos pensar que un programa secuencial habra hecho lo mismo. En este start() caso es as, ms o menos. Al invocar al mtodo start los hilos intentan ejecutarse a la vez. Como slo uno puede entrar a ejecutarse, los otros quedan esperando a que les toque su turno. Debemos saber que cuando entra un hilo a ejecutarse, no sale a no ser que se bloquee por alguno de los siguientes motivos: Se ejecute una llamada al mtodo sleep() de Thread Thread. Se ejecute una llamada al mtodo wait() de Object Object. Se realice una operacin de entradasalida. Se realice una llamada a un mtodo synchronized de un objeto bloqueado. Intente ejecutarse un hilo con mayor prioridad.Laboratorio de Programacin V

Doc. Lic. Georgina Aruquipa

Ejercicios - Multihilos Multiples hilos que imprimen a intervalos aleatorios Hilos que modifican un objeto compartido sin sincronizacin Hilos que modifican un objeto compartido con sincronizacin

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V

Doc. Lic. Georgina Aruquipa

Laboratorio de Programacin V