PROGRAMACION CONCURRENTE
|
|
|
- Inmaculada Olivera Castilla
- hace 9 años
- Vistas:
Transcripción
1 PROGRAMACION CONCURRENTE Ejemplos III: Sopa de Letras 1
2 Objetivo Mostrar las diferentes estrategias que puede seguir un gestor que tiene que ejecutar una tarea compleja que puede ser paralelizada en diferentes subtareas, para organizar su ejecución concurrente distribuyendo las subtareas entre un conjunto de objetos activos que denominamos obreros y que las ejecutan concurrentemente. El objetivo del ejemplo es la búsqueda concurrente en una sopa de letras de un conjunto de nombres (JUAN, INES, CARMEN, JOSE, MARTA, CARLOS, FELIPE, ANA, PEPE, ROSA) que se encuentran en ella en diferentes posiciones y direcciones. El programa debe buscar la ocurrencia de esos nombres en cualquier dirección y los imprime en la consola indicando la posición de la primera letra y la dirección (LR, RL, UD, DU, DR, DL, UR, UL). NCAHPFELIPESOMCPAPEOUJILANEVIO VABASAEKJINESASANBPXACNAUJVANE AAJOHAPFZAZAREKUFIATEAONIAJERA TROSAOZAFENLCARMENPILRKAENAUIS RPEUNAUJAPOFAERIASAADLLNPEEOCO AUJNAAFOJSUEJAGALDAFPOAUINISOU METUALDAOJILPDPALPMIUSULLAEOLA EKACARLOSAUIACAOAJUANIRAENPAEG OSJKANIIEUPLAURAIREBANOCFOTEBA KALSSENIDSAREÑOARUALPASAEJUANS NABAFKAGPEMMPIJAHJINESAUOSENFO UJIAMEAAIEPDTAIFOLLADIAPLVAJHR DAUNFOLANEHAGUEPILEFLSRNIRENZI ELFAEPOIJUANEPSENINEIPLONEMRAC OAYENSENPMAAPEERADFORAOMPSSCSO RSOOAAUJAEEPHZALNAISUDSANAREEG ANAUJAZAPAPANAFAUIUJUAINEUENIL EHÑEJUANSAARENCARLOSDEPTAMPIAR ASDEJUANPAATRAMEAAZAPARLNATAER BONEINESGAAECARMENÑAPUAIPNDUAH EFESIMANSENIADJUANFAJPAPAULATA 2 2
3 Especificación En el diagrama de clases de la figura se muestra la arquitectura de la aplicación basada en tres clases. 3 Clase Gestor: Existe un único objeto manager en la aplicación que es activo a través del thread del procedimiento main() de la aplicación. El gestor carga del fichero cuyo path se recibe en su lanzamiento haciendo uso del método estático Sopa.CargaSopa(). De forma repetida, el gestor invoca el método estático Sopa.leeNombres() y en él se queda suspendido a la espera de que el operador introduzca la lista de nombres que quiere buscar en la sopa. El operador la introduce como una lista de nombres separados por espacios. Por ejemplo: Juan, Ines, Felipe, Carmen, Pepe, Juan, Luis return El manager utilizando las diferentes estrategias que se irán proponiendo, delega en un conjunto de obreras la búsqueda de cada una de los nombres propuestas. Espera a que todas las obreras hayan finalizado, y luego vuelve a quedar a la espera de que el operador proponga desde el teclado una nueva lista de nombres. El manager cierra la aplicación cuando recibe del operador una lista sin ningún nombre. Gestor() => Constructor del objeto Gestos. De acuerdo con la estrategia de implementación, instancia todos los elementos que se requieren para ejecutar la aplicación; main(string[] args) => Método que lanza la aplicación. En args debe pasarse el nombre del fichero en el que se almacena la sopa de letras. Clase Obrero: Durante la ejecución de cada búsqueda, deberán instanciarse o estar instanciadas tantos objetos de la clase Obrero como nombres se vayan a buscar. Cada obrero participante recibe al comienzo de la búsqueda un nombre que debe buscar en la sopa de letras. Recorre la matriz y en cada posición haciendo uso del método estático Sopa.busca() comprueba si en ella se inicia el nombre buscado, y por cada uno que encuentra lo escribe sobre la impresora haciendo uso del procedimiento estático Sopa.imprime(), indicando su posición y la dirección en que se encuentra. Termina notificando al gestor de alguna manera que ha terminado su tarea. Los obreros ofrecen diferentes interfaces de acuerdo con la estrategia que se utilice. Clase Sopa: Constituye la infraestructura pasiva y estática en la que se encuentra almacenada la sopa de letras y a la que acuden los obreros para buscar los nombres en la sopa, y para imprimir los resultados encontrados. Contiene el algoritmo de búsqueda que es utilizado por los obreros para encontrar su nombre de consigna. Los procedimientos que ofrecen su interfaz son: static void cargasopa(string pathofsopafile) => Es invocado por el manager para que lea la sopa de letras del fichero cuyo path se pasa como parámetro. static String[] leenombre() => Espera que el operador introduzca una lista de nombres desde el teclado. Retorna un array de strings con un nombre en cada elemento. Si no se introduce ningún nobre retorna un string nulo. static void String buscanombre( String nombre, int fila, int col) => Procedimiento reentrante que es invocado concurrentemente por cada obrero para buscar su nombre. Busca todas las ocurrencias del nombre que se inicie en la fila y columna que se pasan como parámetro. Retorna un mensaje que contiene el nombre, la fila, la columna, y la dirección o direcciones en que se ha encontrado. synchronized static void imprime(string mensaje) => Imprime en la consola el texto que se pasa como parámetro mensaje. Es un método synchronaized, por lo que si se invoca concurrentemente, se secuencializa su ejecución. 3
4 Diseño I: Implementación secuencial. El gestor realiza el proceso completo buscando en el propio thread del método principal main() los nombres que introduce el operador. 4 4
5 Diseño I: Código public class Obrero { String nombre; Obrero(String nombre) { this.nombre = nombre; String s; for (int fila = 0; fila < Sopa.dimensionMatriz(); fila++) { for (int col = 0; col < Sopa.dimensionMatriz(); col++) { s = Sopa.busca(nombre, fila, col); if (s!= "") Sopa.imprime(s); 5 5
6 Diseño I: Código import java.io.*; import java.util.*; public class Gestor { public static void main(string[] args) { long tiempoinicial; try { Sopa.cargaSopa(args[0]); catch (IOException e) { ; int numnombres = 1; while (numnombres!= 0) { Vector<Obrero> listaobreros = new Vector<Obrero>(numNombres); Vector<String> listanombres = new Vector<String>(); listanombres = Sopa.leeNombres(); tiempoinicial = System.currentTimeMillis(); numnombres = listanombres.size(); for (int i = 0; i < numnombres; i++) { String nombre = listanombres.elementat(i); listaobreros.add(i, new Obrero(nombre)); System.out.println("Tiempo de ejecución: " + (System.currentTimeMillis() - tiempoinicial) + " ms"); 6 6
7 Diseño 2: Creación dinámica de los objetos obreros El gestor una vez que ha recibido la lista de nombres que deben ser buscados, crea dinámicamente un nuevo obrero por cada nombre, y le pasa el nombre que debe buscar a través del constructor. Los obreros son efímeros, y se destruyen tras haber realizado la búsqueda y su impresión. El gestor queda suspendido a la espera de que cada uno de los obreros hayan terminado y luego vuelve a requerir al operador una nueva lista de nombres o la orden de finalizar. 7 7
8 Diseño 2:Diagrama de actividad 8 8
9 Diseño 2:Diagrama de secuencias 9 9
10 Diseño 1: Modificar? Los obreros son efímeros, y se destruyen tras haber realizado la búsqueda public class Obrero { String nombre; Obrero(String nombre) { this.nombre = nombre; String s; for (int fila = 0; fila < Sopa.dimensionMatriz(); fila++) { for (int col = 0; col < Sopa.dimensionMatriz(); col++) { s = Sopa.busca(nombre, fila, col); if (s!= "") Sopa.imprime(s); 10 10
11 Diseño 2:Código public class ObreroEfimero extends Thread { String nombre; ObreroEfimero(String nombre){ this.nombre=nombre; this.start(); public void run() { for (int fila=0;fila<sopa.dimensionmatriz();fila++){ for (int col=0;col<sopa.dimensionmatriz();col++){ String s = Sopa.busca(nombre,fila,col); if (s!="") Sopa.imprime(s); 11 11
12 Diseño 1: Modificar? crea dinámicamente un nuevo obrero por cada nombre El gestor queda suspendido a la espera de que cada uno de los obreros hayan terminado import java.io.*; import java.util.*; public class Gestor { public static void main(string[] args) { long tiempoinicial; try { Sopa.cargaSopa(args[0]); catch (IOException e) { ; int numnombres = 1; while (numnombres!= 0) { Vector<Obrero> listaobreros = new Vector<Obrero>(numNombres); Vector<String> listanombres = new Vector<String>(); listanombres = Sopa.leeNombres(); tiempoinicial = System.currentTimeMillis(); numnombres = listanombres.size(); for (int i = 0; i < numnombres; i++) { String nombre = listanombres.elementat(i); listaobreros.add(i, new Obrero(nombre)); System.out.println("Tiempo de ejecución: " + (System.currentTimeMillis() - tiempoinicial) + " ms"); 12 12
13 Diseño 2:Código import java.io.*; import java.util.*; public class Gestor { public static void main(string[] args) { Collection<ObreroEfimero> obreroscreados = new ArrayList<ObreroEfimero>(); Vector<String> listanombres = new Vector<String>(); int numpalabras = 1; long tiempoinicial = 0; try { Sopa.cargaSopa(args[0]); catch (IOException e) { System.out.println("el fichero " + "args[0]" + " no existe"); ; while (numpalabras!= 0) { listanombres = Sopa.leeNombres(); tiempoinicial = System.currentTimeMillis(); numpalabras = listanombres.size(); for (int i = 0; i < numpalabras; i++) { obreroscreados.add(new ObreroEfimero(listaNombres.get(i))); Iterator<ObreroEfimero> iter = obreroscreados.iterator(); iter = obreroscreados.iterator(); while (iter.hasnext()) { try { iter.next().join(); catch (InterruptedException e) { System.out.println("Tiempo de ejecución: " + (System.currentTimeMillis() - tiempoinicial) + " ms"); 13 13
14 Diseño 3: Creación estática de los objetos obreros. El gestor crea en su constructor un número obreros igual al número máximo de nombres que pueden ser requeridos por el operador (Sopa.numeroMaximoNombres()). Los obreros permanecen creados durante todo el tiempo de la aplicación. Cuando el gestor ha recibido la lista de nombres se comunica con un número de obreros igual al número de nombres recibidos, y a cada uno de ellos le transfiere el nombre que deben buscar. Luego vuelve a comunicar con cada uno de los obreros para esperar a que hayan finalizado su búsqueda. Cuando todos los obreros han finalizado la búsqueda, el gestor requiere del operador una nueva lista de nombres o la orden de finalizar. Los obreros son servidores activos. Cuando se crean se suspenden en su propio lock hasta que el gestor le proporciona un nuevo nombre y pasan a buscarlo. Luego se vuelven a suspender hasta que se le proporcione el siguiente. Finalizan cuando detectan que el gestor ha finalizado (como daemons)
15 Diseño 3:Diagrama de actividad 15 15
16 Diseño 3:Diagrama de secuencias 16 BuscaNombre() lo hace sobre cada obrero, pero hemos dibujado uno sólo para evitar la complejidad. 16
17 Diseño Base: Modificar? public class ObreroPersistente extends Thread { String nombre; ObreroPersistente(){ synchronized public void buscanombre(string nombre){ nombre=nombre; synchronized public void esperafinbusqueda(){ public void run() { for (int fila=0;fila<sopa.dimensionmatriz();fila++){ for (int col=0;col<sopa.dimensionmatriz();col++){ String s = Sopa.busca(nombre,fila,col); if (s!="") Sopa.imprime(s); Los obreros permanecen creados durante todo el tiempo de la aplicación. Los obreros son servidores activos. Cuando se crean se suspenden en su propio lock hasta que el gestor le proporciona un nuevo nombre y pasan a buscarlo. Cuando el gestor ha recibido la lista de nombres se comunica con los obreros y le transfieres el nombre que deben buscar. Luego vuelve a comunicar con cada uno de los obreros para esperar a que hayan finalizado su búsqueda. Luego se vuelven a suspender hasta que se le proporcione el siguiente. Los obreros son daemons
18 Diseño 3:Código public class ObreroPersistente extends Thread { String nombre; boolean encontrado; ObreroPersistente(){ encontrado=false; nombre=null; this.setdaemon(true); this.start(); synchronized public void buscanombre(string nombre){ this.nombre=nombre; this.notify(); synchronized public void esperafinbusqueda(){ if (!encontrado){ try { this.wait(); // Se suspende el GESTOR catch (InterruptedException e) { // Nunca se produce public void run() { while(true){ await(); // Permanece hasta gestor buscanombre for (int fila=0;fila<sopa.dimensionmatriz();fila++){ for (int col=0;col<sopa.dimensionmatriz();col++){ String s = Sopa.busca(nombre,fila,col); if (s!="") Sopa.imprime(s); encontrado=true; activagestor(); synchronized private void await(){ try { this.wait(); // Se suspende el OBRERO catch (InterruptedException e) { synchronized private void activagestor(){ this.notify();
19 Diseño 3:Código import java.io.*; import java.util.*; public class Gestor { public static void main(string[] args) { ObreroPersistente[] listaobreros= new ObreroPersistente[Sopa.numeroMaximoDeNombres()]; for (int i=0;i<sopa.numeromaximodenombres();i++){ listaobreros[i]=new ObreroPersistente(); Vector<String> listanombres = new Vector<String>(); int numnombres = 1; long starttime; try { Sopa.cargaSopa(args[0]); catch (IOException e) { System.out.println("el fichero "+"args[0]"+" no existe"); ; while (numnombres!= 0) { listanombres = Sopa.leeNombres(); starttime = System.currentTimeMillis(); numnombres = listanombres.size(); for (int i = 0; i < numnombres; i++) { listaobreros[i].buscanombre(listanombres.elementat(i)); for (int i = 0; i < numnombres; i++) { listaobreros[i].esperafinbusqueda(); System.out.println("Tiempo de ejecución: " + (System.currentTimeMillis() - starttime) + " ms"); 19 19
20 Diseño 4: Interacción a través de un controlador pasivo. El gestor crea en su constructor un número de obreros igual al número máximo de nombres que pueden ser requeridas por el operador (Sopa.numeroMaximoNombres()), así como el controlador. Los obreros y el controlador permanecen creados durante todo el tiempo de la aplicación. Cuando el gestor ha recibido la lista de nombres comunica al controlador (elcontrolador.buscanombre()) los diferentes nombres recibidos. Luego se suspende en el controlador (elcontrolador.esperafinbusqueda()) hasta que todos los nombres han sido buscados. Luego requiere del operador una nueva lista de nombres o la orden de finalizar, la cual también la comunica al controlador (elcontrolador.termina()). Los obreros son también objetos activos y clientes del controlador. Cuando se crean se suspenden en el controlador (el Controlador.esperaNombre())a la espera de que se le proporciones el nombre que deben buscar. Luego busca el nombre y vuelve a repetir la espera hasta una nueva búsqueda. Cada obrero finaliza cuando el controlador le proporciona como nombre a buscar un string nulo. El Controlador es un servidor pasivo que sirve de enlace entre el gestor y los obreros que son todos clientes suyos. Cuando recibe el requerimiento de un nuevo nombre (esperanombre()) por parte de un obrero, lo suspende hasta que el nombre haya sido encargada por el gestor (buscanombre()). Cuando el gestor le requiere si ha terminado la búsqueda (termina()), lo suspende, hasta que todas los obreros activos hayan finalizado sus búsquedas. Cuando recibe el requerimiento de finalizar, activa todas las obreras suspendidas pasándole un string nulo para que terminen
21 Diseño 4: Especificación 21 21
22 Diseño 4:Diagrama de actividad 22 22
23 Diseño 4:Código public class ObreroCliente extends Thread { Controlador elcontrolador; String elnombre="inicio"; ObreroCliente(Controlador elcontrolador) { this.elcontrolador = elcontrolador; this.start(); public void run() { while(!elnombre.equals("")){ elnombre=elcontrolador.esperanombre(); if (!elnombre.equals("")){ // si es "" no busca sino termina. for (int fila=0;fila<sopa.dimensionmatriz();fila++){ for (int col=0;col<sopa.dimensionmatriz();col++){ String s = Sopa.busca(elNombre,fila,col); if (s!="") Sopa.imprime(s); 23 23
24 Diseño 4: Controlador import java.util.*; public class Controlador2 { int numobrerasesperando; Stack<String> colanombres=new Stack<String>(); Controlador2() { numobrerasesperando=0; Synchronized public void esperafinbusqueda() { while (numobrerasesperando<sopa.numeromaximodenombres()){ try { this.wait(); catch (InterruptedException e) { synchronized public void termina() { for (int i = 0; i < numobrerasesperando; i++) { buscanombre(""); ; synchronized public String esperanombre() { numobrerasesperando++; while(colanombres.size()==0){ try { this.wait(); catch (InterruptedException e) { //saldrá del wait cuando tenga un nombre que buscar(enbuscanombre la han hecho notify) numobrerasesperando--; return colanombres.pop(); synchronized public void buscanombre(string elnombre) { this.colanombres.push(elnombre); //despierta las obreras que estan en el wait del controlador //despierta al gestor que está en el wait del controlador this.notifyall(); 24 24
25 Diseño 4:Código (variante usando dos lock) import java.util.*; public class Controlador { int numobrerasesperando; Stack<String> colanombres=new Stack<String>(); Object esperandofin=new Object(); Controlador() { numobrerasesperando=0; public void esperafinbusqueda() { while (numobrerasesperando<sopa.numeromaximodenombres()){ synchronized(esperandofin){ try { esperandofin.wait(); // suspende GESTOR catch (InterruptedException e) { synchronized public void buscanombre(string elnombre) { this.colanombres.push(elnombre); this.notify(); synchronized public void termina() { System.out.println("Terminado"); for (int i = 0; i < numobrerasesperando; i++) { buscanombre(""); ; synchronized public String esperanombre() { numobrerasesperando++; synchronized(esperandofin){ esperandofin.notify(); try { this.wait();//lock del controlador suspende OBREROS catch (InterruptedException e) { numobrerasesperando--; return colanombres.pop(); 25 25
26 Diseño 4:Código import java.io.*; import java.util.*; public class Gestor { public static void main(string[] args) { Controlador elcontrolador=new Controlador(); int numnombres = 1; Vector<String> listanombres=new Vector<String>(); long starttime; for (int i=0;i<sopa.numeromaximodenombres();i++){ new ObreroCliente(elControlador); try { Sopa.cargaSopa(args[0]); catch (IOException e) { System.out.println("el fichero "+"args[0]"+" no existe"); ; while (numnombres!= 0) { listanombres = Sopa.leeNombres(); starttime = System.currentTimeMillis(); numnombres = listanombres.size(); for (int i = 0; i < numnombres; i++) { elcontrolador.buscanombre(listanombres.elementat(i)); Thread.yield(); elcontrolador.esperafinbusqueda(); System.out.println("Tiempo de ejecución: " + (System.currentTimeMillis() - starttime) + " ms"); elcontrolador.termina(); 26 26
Programación Concurrente y Distribuida Ingeniería Informática Facultad de Ciencias Universidad de Cantabria.
Programación Concurrente y Distribuida Ingeniería Informática Facultad de Ciencias Universidad de Cantabria. Documento: Práctica 1 Sopa de Letras Autores: Fecha: Laura Barros J.M. Drake 5-6 Octubre Objetivo
Solución al Examen de Prácticas de Programación (Ingeniería Informática)
Solución al Examen de Prácticas de Programación (Ingeniería Informática) Junio 2006 Parte I. Cuestiones (3 puntos=50% nota del examen) 1) Se desea crear un conjunto de clases para representar en un programa
Programación concurrente en Java
Diseño Y Aplicaciones de Sistemas Distribuidos Programación concurrente en Java Joan Vila DISCA / UPV Departament d Informàtica de Sistemes i Computadors Universitat Politècnica de València Threads en
Tema 6. Threads: programas multitarea
Tema 6. Threads: programas multitarea Procesos e hilos Creación de threads Ciclo de vida de un thread Sincronización Prioridades Grupos de threads Relación de métodos Ejemplo sincronización 1 Procesos
Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).
Ejecución de hebras En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura). Hebras vs. Procesos Los cambios de contexto son más costosos en
Estructura de datos y Programación
Estructura de datos y Programación Tema: Conceptos Básicos- Estructuras de control - Arreglos Ing. Analia Méndez Ing. Raquel Zarco Año: 2012 ELEMENTOS DE UN PROGRAMA EN JAVA El programa Java consta de
Examen de Métodos de Programación Ingeniería Informática Primera Parte
Examen de Métodos de Programación Ingeniería Informática Primera Parte Cuestión 1. (2 puntos) Se pretende guardar y recuperar matrices de números reales de cualquier dimensión en ficheros binarios de tipos
Arquitecturas cliente/servidor
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?
Examen de Programación II (Ingeniería Informática)
Examen de Programación II (Ingeniería Informática) Septiembre 2010 1) Lenguaje C (2 puntos) Escribir el módulo "elimina_substring" (ficheros elimina_substring.h y elimina_substring.c) que defina una única
Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos
Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende
Programación concurrente
Programación concurrente Java y Servicios Web I Master en Ingeniería Matemática Manuel Montenegro Dpto. Sistemas Informáticos y Computación Desp. 467 (Mat) [email protected] Programación concurrente
Bloque II. Elementos del lenguaje de programación Java
Bloque II. Elementos del lenguaje de programación Java 1.Introducción a los lenguajes de programación 2. Estructura de un programa 3. Datos y expresiones simples 4. Instrucciones de control 5. Entrada/salida
PROGRAMACION DISTRIBUIDA
PROGRAMACION DISTRIBUIDA Distribución basada en el patrón proxy-servant Héctor Pérez 2 Distribución de aplicaciones basadas en objetos Objetivo: rediseño de una aplicación orientada a objetos para ser
Tema 4. Excepciones en Java
Programación en Java Tema 4. Excepciones en Java Luis Rodríguez Baena Facultad de Informática Excepciones (I) Permiten la captura de errores en tiempo de ejecución. El control de excepciones permite extraer
Examen de Prácticas de Programación Ingeniería Informática
Examen de Prácticas de Programación Ingeniería Informática Junio 2007 1) (2 puntos) Escribir en Java la implementación de los métodos public void escribematrizenfichero(double[][] m, String nomfich)...
TEMA 5: Control de la Concurrencia en Java (API Estándar)
TEMA 5: Control de la Concurrencia en Java (API Estándar) CONTENIDO Exclusión Mutua con código synchronized. Exclusión Mutua con métodos synchronized. Protocolos de Control de la Exclusión Mutua. Interbloqueos
Java: Programación Multithread
Qué es un thread? Java: Programación Multithread Hasta el momento hemos desarrollado programas secuenciales con un único thread: en cualquier instante durante la ejecución de un programa hay un único punto
HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA
Estructura de la Información en Programación I.T.I.G., Matemáticas. Curso 2008/2009 Nombre:... Fecha: / 01 / 2009 HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA Esta hoja de ejercicios nos servirá
Programación concurrente en Java. Breve introducción. Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas
Programación concurrente en Java. Breve introducción Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas Concurrencia en Java Hilos de ejecución Clase Thread e interfaz Runnable Pausas Interrupciones
MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar
MONITORES EN JAVA Un monitor es un objeto que implementa acceso bajo e.m. a todos sus métodos, y provee sincronización En Java, son objetos de una clase cuyos métodos públicos son todos synchronized Un
Multienhebrado en Java Un toque de sincronización Transporte en Java Ejemplo conjunto
Java y multiprogramación sobre red Sistemas Distribuidos ITInformática (UVA) César Llamas Bello 2003 Índice Multienhebrado en Java Un toque de sincronización Transporte en Java Ejemplo conjunto 26/02/2003
Examen Teórico Convocatoria de Junio de 2012
Examen Teórico Convocatoria de Junio de 2012 Nombre: DNI: Titulación: 1. Sobre el control de errores en Java: a) El siguiente método contiene un error de compilación debido al uso de excepciones. Explica
PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:
Examen de Java Nombre: DNI: Titulación: 1. Cómo podemos compilar desde la línea de comandos la clase Java A que utiliza una librería empaquetada bd.jar? 2. Indica si es correcto el siguiente código. Justifica
Procesamiento paralelo con hilos de Java
Procesamiento paralelo con hilos de Java Tabla de contenidos 1. Soporte para hilos en Java... 1 2. Creación y control de un hilo... 2 2.1. Métodos de creación de un hilo... 2 2.2. Control de hilos mediante
Programación Orientada a Eventos
Programación Orientada a Eventos Técnicas de Programación Santiago Pavón V:2012.03.13 Programas Secuénciales El flujo de ejecución del programa sigue la secuencia de sentencias que lo forman. El estado
1 HILOS (THREADS) EN JAVA
1 HILOS (THREADS) EN JAVA 1.1QUÉ ES UN THREAD La Máquina Virtual Java (JVM) es un sistema multihilo. Es decir, es capaz de ejecutar varios hilos de ejecución simultáneamente. La JVM gestiona todos los
CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE
CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE 1 Estructura de Datos 1. Logica de Programación 2. Uso de Algoritmos usando Lenguaje Java 3. Ingreso de datos 4. Sentencias de Control 1.
PROGRAMACIÓN EN JAVA
SISTEMAS INFORMÁTICOS INDUSTRIALES curso 2007-2008 PROGRAMACIÓN EN JAVA PRÁCTICA 3: Comunicación entre tareas. Modelo productor / consumidor. Objetivos Implementar una aplicación en Java en la que existan
UNIDAD III.- Programación Concurrente
UNIDAD III.- Programación Concurrente Sincronización Todo thread tiene una prioridad. Un thread hereda su prioridad, cuyo valor está entre 1 y 10 La prioridad puede modificarse con los métodos: setpriority()
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA PRACTICA 8 MONITORES BASADOS EN SEMÁFOROS
Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones
Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice
Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos
Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos Programación Orientada a Objetos Facultad de Informática Dep. Ingeniería del Software e Inteligencia Artificial Universidad
Introduciendo datos desde el
Introduciendo datos desde el teclado Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria [email protected] Objetivos Crear programas interactivos que lean datos
Práctica 5: Common Object Request Broker Architecture CORBA
Práctica 5: Common Object Request Broker Architecture CORBA Aplicaciones Telemáticas II Introducción El objetivo de esta práctica es entender mejor el funcionamiento de CORBA (Common Object Request Broker
String s = t.readline() 4. Si el valor leído desde teclado, se requiere almacenar en una variable de un tipo diferente a
Desde teclado Entrada de datos 1. Importar el paquete java.io 2. Crear un objeto BufferedReader, pasando como parámetro al constructor un objeto InputStreamReader. BufferedReader t = new BufferedReader(new
Java RMI Remote Method Invocation. Invocación Remota de Métodos en Java
Java RMI Remote Method Invocation Invocación Remota de Métodos en Java Contenido Introducción Implementación Diseño de la interfaz remota. Implementación de la interfaz remota. Obtención de las clases
Concurrencia en Java
Concurrencia en Java Concurrencia y Distribución Programación Avanzada Posgrado en Ciencia e Ingeniería de la Computación, UNAM 1. El mecanismo de threads Una aplicación Java o applet puede contener secciones
Objetivos. El alumno empleará el concepto de excepción en la programación orientada a objetos para el manejo de errores de ejecución.
Universidad Nacional Autónoma de México Facultad de Ingeniería PRACTICA 10 PROGRAMACIÓN ORIENTADA A OBJETOS (MANEJO DE EXCEPCIONES) Objetivos El alumno empleará el concepto de excepción en la programación
Programación concurrente y semáforos en Java
Programación concurrente y semáforos en Java En Java es posible ejecutar tareas en paralelo, utilizando hebras de control (hilos, threads). Este modo de programación permite tener un espacio de memoria,
Guillermo Román Díez
Concurrencia Creación de Procesos en Java Guillermo Román Díez [email protected] Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Creación de Procesos en Java 1/18 Concurrencia
Programación Java. Práctica 11. Javier García de Jalón José Ignacio Rodríguez Alfonso Brazález Alberto Larzabal Jesús Calleja Jon García
Práctica 11 Programación Java San Sebastián, mayo 1999 Javier García de Jalón José Ignacio Rodríguez Alfonso Brazález Alberto Larzabal Jesús Calleja Jon García Informática 2: Práctica nº 11 página 1 INDICE
Excepciones y E/S Java y Servicios Web I Master en Ingeniería Matemática
Excepciones y E/S Java y Servicios Web I Master en Ingeniería Matemática Manuel Montenegro Dpto. Sistemas Informáticos y Computación Desp. 467 (Mat) [email protected] Contenidos Generación de excepciones.
Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008
Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid de abril de 00 Ejemplos de programación concurrente En un sistema operativo, diversos programas compiten por los recursos
Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo
Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo Hilo (theread) llamado también proceso ligero o subproceso, es la unidad de ejecución de un proceso y esta asociado con una secuencia
Prueba N o 1. Programación II
UNIVERSIDAD ANDRÉS BELLO 1 Prueba N o 1 Programación II Profesores: José Luis Allende y Carlos Beyzaga. Fecha: 10 de Septiembre de 2013 Nombre: Nota: Instrucciones: Coloque su nombre a todas las hojas.
Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución.
Threads o Hilos Los hilos son otra forma de crear la posibilidad de concurrencia de actividades; sin embargo, la gran diferencia es que los hilos comparten el código y el acceso a los datos. En cierta
Parte I: Programación en un lenguaje orientado a objetos
Parte I: Programación en un lenguaje orientado a objetos 1. Introducción a los lenguajes de programación 2. Datos y expresiones 3. Estructuras algorítmicas 4. Datos compuestos 5. Modularidad 6. Tratamiento
Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
las RPC de Java. Parte I Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid de marzo de 006 RMI y RPC RPC: Remote Procedure Call. RMI y RPC RPC: Remote Procedure Call.
PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA
PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA Qué es la arquitectura cliente servidor? La arquitectura cliente-servidor es un modelo de aplicación distribuida en el que las tareas se reparten
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 + +.
APUNTES DE JAVA Agenda Bienvenida Conociendo Java La Maquina Virtual Descargar e instalar el compilador El entorno de trabajo El paradigma de la programación orientada a objetos Qué es Java? Un lenguaje
dit Programación concurrente Sincronización condicional UPM
20151028 dit UPM Programación concurrente Sincronización condicional Juan Antonio de la Puente Algunos derechos reservados. Este documento se distribuye bajo licencia Crea9ve Commons
INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C)
APRENDERAPROGRAMAR.COM INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado
PROGRAMACION CONCURRENTE Y DISTRIBUIDA. VI.2: Red Ferroviaria ConSocket. Laura Barros
PROGRAMACION CONCURRENTE Y DISTRIBUIDA VI.2: Red Ferroviaria ConSocket Objetivo En esta versión del proyecto Red Ferroviaria se distribuye el código en varios procesadores. El procesador NodoInfraestructura
o Los arreglos son colecciones ordenadas de datos del mismo tipo. o Ejemplos: 2
Arreglos en Java o Los arreglos son colecciones ordenadas de datos del mismo tipo. o Ejemplos: 3 27 50 4 Arreglo de bytes Arreglos con tipos primitivos hola Casa Auto No Arreglo de Strings EII147-01-02
RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA
UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí
Concurrencia en Java
Concurrencia en Java Herramientas proporcionadas por Java La Máquina Virtual (JVM) Pedro Pablo Gómez Martín La clase Thread Clase principal con la que conseguir concurrencia. La llamada a su método start()
5. Sentencias selectivas o condicionales
60 A. García-Beltrán y J.M. Arranz 5. Sentencias selectivas o condicionales Objetivos: a) Describir el funcionamiento de las sentencias selectivas o condicionales (if-else y switch) b) Interpretar el resultado
Ejemplo. class SiNoThread extends Thread { private String SiNo; static int Contador = 0; public SiNoThread(String s) { super(); SiNo = s; }
Qué son los threads? Todos los programadores conocen lo que es un proceso, la mayoría diría que es un programa en ejecución: tiene un principio, una secuencia de instrucciones y tiene un final. Un thread
UNADM. Estructura de datos. Guillermo Duran Garcia AL Actividad 2. Identificación de errores en métodos de ordenación
UNADM Estructura de datos Actividad 2. Identificación de errores en métodos de ordenación Guillermo Duran Garcia AL12524075 Actividad 2. Identificación de errores en métodos de ordenación. La siguiente
1. Introducción. 1.1 Construcción de una aplicación CORBA
1. Introducción 1.1 Construcción de una aplicación CORBA Toda aplicación CORBA empieza con la definición de las interfaces de los objetos que pueden distribuirse. Para ello se utiliza el lenguaje IDL.
Metodología y Tecnología de la Programación
Tema 4. Abstracción procedimental y de datos 1. Cuál es el error del siguiente programa? import java.util.scanner; class Respuesta{ static Scanner leer=new Scanner(System.in); int valor = lectura(); System.out.println(valor);
Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar
Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar Introducción El alumno creará cuatro programas en java que manejen control de flujo mediante las sentencias de bucle while y do/while,
Federico Peinado www.federicopeinado.es
Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es
Examen de Prácticas de Programación Ingeniería Informática
Examen de Prácticas de Programación Ingeniería Informática Septiembre 2007 1) (3.5 puntos) Se pretende desarrollar un programa para gestionar las reparaciones de coches realizadas en un garaje. Del análisis
7. Otras sentencias Sentencia break. 84 A. García-Beltrán y J.M. Arranz
84 A. García-Beltrán y J.M. Arranz 7. Otras sentencias Objetivos: a) Describir el funcionamiento de las otras sentencias de control (break, continue y try-catch) b) Interpretar el resultado de una secuencia
Cliente/Servidor en Java
Cliente/Servidor en Java Grupo ARCOS Desarrollo de Aplicaciones Distribuidas Ingeniería Informática Universidad Carlos III de Madrid Contenidos 1. Introducción: 1. Paradigma cliente/servidor 2. Entorno
1. Cuántas sentencias hay en la secuencia principal del siguiente programa?
1. Cuántas sentencias hay en la secuencia principal del siguiente programa? public class PruebaSwitch { System.out.print ("Opcion: "); case 3: System.out.println ("miércoles "); A. 1. B. 4. C. Más de 10.
INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)
APRENDERAPROGRAMAR.COM INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C) Sección: Cursos Categoría: Lenguaje de programación Java nivel
Unidad II Tema 3: Tratamiento de arreglos y cadenas en Java
Unidad II Tema 3: Tratamiento de arreglos y cadenas en Java Profesor: Jorge Escalona / Tobías Bolívar Email: [email protected] / [email protected] Web: http://estructuradatos.tripod.com 1 Qué
Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.
Threads Un thread es un flujo de control secuencial dentro de un programa. A los threads también se los conoce como procesos livianos ó contextos de ejecución. Un thread es similar a un programa secuencial:
Ingeniería del Software Separación entre Presentación y Lógica del Negocio
Introducción En este laboratorio desarrollaremos una aplicación que verifica si una cuenta y un password son correctos. En dicha aplicación la presentación y la lógica del negocio se definirán en dos capas
Programación Concurrente en Java
Hebras y monitores Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid 21 de marzo de 2006 Threads Extendiendo la clase java.lang.thread. public class PrThread extends
Interfaces. Amparo López Gaona. Septiembre de Amparo López Gaona () Interfaces Septiembre de / 1
Interfaces Amparo López Gaona Septiembre de 2008 Amparo López Gaona () Interfaces Septiembre de 2008 1 / 1 Interfaces Las interfaces Java permiten al diseñador de clases establecer su forma definiendo
LA CLASE VECTOR DEL API JAVA. MÉTODOS TRIMTOSIZE Y ENSURECAPACITY EJEMPLO Y EJERCICIOS RESUELTOS. (CU00922C)
APRENDERAPROGRAMAR.COM LA CLASE VECTOR DEL API JAVA. MÉTODOS TRIMTOSIZE Y ENSURECAPACITY EJEMPLO Y EJERCICIOS RESUELTOS. (CU00922C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado
UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez
UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA Sockets para servidor Daniel Díaz Sánchez Florina Almenárez Andrés Marín Departamento de Ingeniería Telemática Universidad Carlos
Práctica 4 Concurrencia en Java
Práctica 4 Concurrencia en Java Escuela de Ingeniería y Arquitectura Depto. de Informática e Ingeniería de Sistemas 1. Objetivos 1. Crear y manipular hilos de ejecución en Java 2. Utilizar monitores en
El servicio de echo con sockets
PRÁCTICA 2 El servicio de echo con sockets E l objetivo de esta práctica es crear y ejecutar una aplicación cliente servidor "echo" basada en sockets TCP pero estructurándola según el modelo de objetos
Clases en Java. Declaración
Clases en Java Declaración Class Una clase puede ser definida por el usuario o por uno de los paquetes incorporados a Java y se declara con la palabra reservada class. Los métodos y las variables definidas
o Una clase es un tipo al cual pertenecen objetos o instancias de la clase.
o Una clase es un tipo al cual pertenecen objetos o instancias de la clase. Introducción a la Programación Orientada a Objetos EII147-01-02 Introducción a las tecnologías de información Clase Persona:
RMI. Aplicaciones Distribuidas
RMI Aplicaciones Distribuidas Contenido Objetos Distribuidos y RMI. Interface Remota. Clase Implementación. Referencias Remotas. Registro RMI. Paso de parámetros. Descarga dinámica de código. Desarrollo
Multitarea en Java. Rafa Caballero - UCM
Multitarea en Java Rafa Caballero - UCM Programa Monoproceso (monotarea) En cada momento hay una única instrucción ejecutándose Se dice que el programa es monotarea, o monoproceso o monohebra (o single
Práctica 4: Java Remote Method Invocation (RMI)
Práctica 4: Java Remote Method Invocation (RMI) Aplicaciones Telemáticas II Introducción Hasta el momento hemos visto aplicaciones remotas donde un cliente utiliza un objeto remoto que ha sido publicado
Programación Orientada a Objetos. Java: Excepciones
Programación Orientada a Objetos Java: Excepciones Eduardo Mosqueira Rey LIDIA Laboratorio de Investigación y desarrollo en Inteligencia Artificial Departamento de Computación Universidade da Coruña, España
Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.
Implementación Orientada a Objetos. Unidad V 5.1 Estructura de una clase. Una clase consiste en: algunas_palabras class nombre_de_la_clase [algo_más] { [lista_de_atributos] [lista_de_métodos] Lo que está
Práctica 2: Java Remote Method Invocation (RMI)
Práctica 2: Java Remote Method Invocation (RMI) Aplicaciones Telemáticas II Introducción El objetivo de esta práctica es conocer un poco más sobre el paradigma de objetos remotos. La idea principal es
Guía - Taller # 2 (JAVA)
CEET - Distrito Capital Programa de Formación: ADSI 150752 TRIMESTRE VI Conocimiento de Conocimiento: Aplicar diversos estilos de Programación usando herramientas para Desarrollo Web Instructor: Ing. Espec.
Tema 5 Corrección y Robustez Excepciones en Java
Tema 5 Corrección y Robustez Excepciones en Java Parte II: Excepciones en Java Programación Orientada a Objetos Curso 2013/2014 Contenido Introducción Excepciones comprobadas Caso de estudio Tratamiento
! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes
Introducción Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual [email protected]! Qué es la POO?! Un paradigma de programación! Un paradigma es una forma de afrontar
Introducción a Java LSUB. 30 de enero de 2013 GSYC
Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial
Práctica No. 5. Estructuras con Memoria Dinámica
Práctica No. 5. Estructuras con Memoria Dinámica Comenzar creando un nuevo proyecto tipo Java llamada Practica05, crear también la clase principal. Se cambiará el nombre del paquete por defecto a uam.pvoe.estructuras.principal,
Excepciones. Excepciones
Excepciones FJP Unidad 12 Excepciones Una excepción es la representación de una condición de error o cualquier situación no esperada en el resultado de un método. Son instancias de subclases de la clase
