CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos
|
|
|
- María Nieves Alvarado Muñoz
- hace 8 años
- Vistas:
Transcripción
1 CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos III. PROGRAMACION CON HILOS (THREADS) EN JAVA Java contiene una serie de clases y construcciones específicas para programar de forma concurrente: java.lang:thread: para el inicio y control de los hilos java.lang.object: para la sincronización de hilos en la compartición de recursos con instrucciones que definen variables de condición: a) wait( ) b) notify( ) c) notifyall( ) synchronized, volatile: Que son palabras reservadas utilizadas en la definición de candados y semáforos para programar la exclusión mutua en la sincronización de los hilos. La programación concurrente en Java (con hilos) es fundamental en la implementación de buenos programas: a) Permite animaciones de applets b) Permite la programación de servidores de red eficientes El entorno de programación Java impone a las clases (que definen hilos dentro de aplicaciones software) el implementar la interfaz Runnable y a los métodos principales de los hilos el llamarse run( ). 58
2 III.1. CREACION DE HILOS (THREADS) EN JAVA Existen dos formas de crear hilos en el lenguaje Java. La primera es utilizar la herencia para extender todas las características de la clase Thread de Java y la segunda es utilizar la implementación de la interfaz Runnable en nuestras clases que representarán nuestros hilos. III.1.1. Heredando de la clase Thread de Java Extendemos la clase Thread (es decir, heredamos de ella) y redefinimos el método público run( ) que en dicha clase esta definido como abstracto: Veamos un sencillo programa de dos threads que imprimen las palabras ping y pong a velocidades diferentes: class PingPong extends Thread String palabra; int retardo; // Que palabra a imprimir!!! // Duración de la pausa public PingPong(String palabra, int retardo) this.palabra=palabra; this.retardo=retardo; try for(;;) System.out.print(palabra+" "); sleep(retardo); catch(interruptedexception e) return; // acabar este thread public static void main(string[] args) PingPong ping=new PingPong("ping",33); PingPong pong=new PingPong("PONG",100); ping.start(); pong.start(); Definimos un tipo de hilo llamado PingPong. Su método run( ) itera para siempre, imprimiendo el campo palabra y durmiendo durante retardo microsegundos. En el método main( ) se crean dos objetos PingPong cada uno de ellos con su propia palabra y ciclo de retardo, e invoca el método start( ) de cada uno de los objetos thread que es quien ejecuta el método run( ) lanzando el hilo a ejecución. La salida producida es la que se muestra a continuación: 59
3 Un hilo puede tener nombre, ya sea como parámetro String para el constructor o como parámetro de una llamada setname. Se puede obtener el nombre actual de un thread invocando a getname( ). El siguiente código muestra un ejemplo de ello: class A extends Thread public A() super(); public A(String nombre) super(nombre); System.out.println("Nombre= "+getname()); class B public static void main(string[] args) A a=new A("Mi hilo"); A b=new A(); b.setname("otro Hilo"); a.start(); b.start(); La salida de este ejemplo es: III.1.2. Implementando la interfaz Runnable de Java Se implementa la interfaz Runnable en una clase con un método público run( ). Veamos una versión Runnable de la clase PingPong creada en la sección anterior. Si se 60
4 comparan ambas versiones se verá que parecen casi idénticas. Las diferencias principales están en la superclase (Runnable vs Thread) y en el programa principal: class RunPingPong implements Runnable String palabra; // Que palabra a imprimir!!! int retardo; // Duración de la pausa public RunPingPong(String palabra, int retardo) this.palabra=palabra; this.retardo=retardo; try for(;;) System.out.print(palabra+" "); Thread.sleep(retardo); catch(interruptedexception e) return; // acabar este thread public static void main(string[] args) Runnable ping=new RunPingPong("ping",33); Runnable pong=new RunPingPong("PONG",200); new Thread(ping).start(); new Thread(pong).start(); En primer lugar se define una nueva clase que implementa Runnable. Su implementación del método run( ) es la misma que la de PingPong. En el main( ) se crean dos objetos RunPingPong con tiempos diferentes; se crea entonces un nuevo objeto Thread para cada uno de ellos y se inicia inmediatamente. Aquí una segunda versión del segundo código fuente mostrado en la sección anterior: class A_version2 implements Runnable System.out.println("Nombre="+Thread.currentThread().getName()); class B_version2 public static void main(string[] args) A_version2 a=new A_version2(); Thread t=new Thread(a,"Mi hilo"); t.start(); 61
5 Esta segunda forma de crear un hilo implementando Runnable es mejor ya que en Java no existe la herencia múltiple. También se puede incluir el hilo dentro del método constructor como lo muestra esta nueva versión del código anterior: class A_version3 implements Runnable private Thread t=null; public A_version3() t=new Thread(this,"Mi hilo"); t.start(); System.out.println("Nombre="+Thread.currentThread().getName()); public static void main(string[] args) A_version3 a=new A_version3(); III.1.3. Constructores de la clase Thread Cuatro constructores Thread permiten especificar un objeto Runnable: public Thread(Runnable objeto): Construye un nuevo Thread que usa el método run( ) del objeto especificado. public Thread(Runnable objeto, String nombre): Construye un nuevo Thread con el nombre especificado y usa el método run( ) del objeto especificado. public Thread(ThreadGroup grupo, Runnable objeto): Construye un nuevo Thread en el ThreadGroup especificado y usa el método run( ) del objeto especificado. public Thread(ThreadGroup grupo, Runnable objeto, String nombre): Construye un nuevo Thread en el ThreadGroup especificado, con el nombre especificado y usa el método run( ) del objeto especificado. III.1.4. Métodos de Instancia más utilizados start( ): Genera un Nuevo Thread de control a partir de los datos del objeto Thread y luego retorna. Invoca el método run( ) del nuevo thread join( ): Espera para siempre a que acabe el Thread que lo llama, esto es, un Thread espera a que otro termine usando este método. stop( ): Detiene la ejecución de un thread suspendido. 62
6 suspend( ): Suspende la ejecución de un thread hasta que sea reanudada explícitamente resume( ): Reanuda la ejecución de un thread suspendido. setpriority(int): Asigna una prioridad de ejecución a un Thread getpriority( ): Se obtiene la prioridad de ejecución de un thread corriente. setdaemon(true): Marca un thread como un thread demonio. Un thread demonio es consumable, es decir, cuando acaba el último thread usuario, los posibles threads demonios se detienen y la aplicación esta hecha. getname( ): Obtiene el nombre actual de un Thread III.1.5. Métodos de clase Diversos métodos estáticos de la clase Thread controlan la planificación del Thread actual. public static void sleep(long millis) throws InterruptedException: Pone el thread actualmente en ejecución a dormir durante al menos el número de milisegundos especificado. Al menos significa que no hay garantía de que el thread vaya a despertarse exactamente en el tiempo especificado. La planificación de otro thread puede interferir, así como la resolución y exactitud del reloj del sistema, entre otros factores. public static void sleep(long millis, int nanos) throws InterruptedException: Pone el thread actualmente en ejecución a dormir durante al menos el número de milisegundos y nanosegundos adicionales especificado. Los nanosegundos estan en el rango public static void yield(): Hace que el thread actualmente en ejecución ceda el paso, de modo que puedan ejecutarse otros threads ejecutables. El planificador de los threads elige un thread a ejecutar entre los threads ejecutables. El thread elegido podría ser el que ha cedido el paso, puesto que puede ser el de máxima prioridad entre los threads ejecutables. El siguiente programa muestra como funciona yield(). La aplicación toma una lista de palabras y crea un thread responsable de imprimir cada una de ellas. El primer parámetro para la aplicación dice si cada thread va a ceder el paso después de cada println( ), el segundo es el número de veces que debe repetir su palabra cada thread. Los parámetros restantes son las palabras a repetir: public class Babble extends Thread static boolean doyield; // Ceder paso a otros hilos? static int howoften; // Cuantas veces imprimir String word; // mi palabra public Babble(String word) this.word=word; 63
7 for(int i=0; i<howoften;i++) System.out.println(word); if (doyield) yield(); //dar oportunidad a otra palabra public static void main(string[] args) try howoften=integer.parseint(args[1]); doyield=new Boolean(args[0]).booleanValue(); //Crear un thread para cada palabra con prioridad máxima //Thread cur=currentthread(); //cur.setpriority(thread.max_priority); for(int i=2;i<args.length;i++) new Babble(args[i]).start(); catch(exception e) System.out.println("java Babble <true/false> <entero> <[palabras ]>"); Cuando los threads no ceden el paso, cada uno de ellos tomará grandes lapsos de tiempo, habitualmente suficiente para terminar todas las impresiones sin que ningún otro thread obtenga ciclos. Así por ejemplo, cuando se ejecuta la aplicación habiendo asignado false a doyield de la manera siguiente: Babble false 3 Did DidNot Yes Lo más probable es que la salida sea: Si cada uno de los threads cede el paso después de cada uno de los println( ), tendrán alguna posibilidad de ejecutarse otros threads de impresión. Cuando asignamos true a doyield con una invocación como la siguiente: Babble true 3 Did DidNot Yes 64
8 Las cesiones dan a los otros threads una oportunidad de ejecutarse y los otros threads ceden, a su vez, el paso, produciendo una salida que se parece más a: La salida mostrada es sólo un resultado posible de ejecución de la aplicación. Al volver a ejecutar la aplicación podría darnos un resultado diferente, en otras palabras, la misma implementación daría resultados distintos en diferentes ejecuciones de la aplicación. Al invocar a yield da a otros threads posibilidades más equitativas en la obtención de ciclos. III.2. SINCRONIZACION DE THREADS Cuando dos cajeros automáticos (threads) necesitan usar el mismo archivo (objeto) existe una posibilidad de entremezclado de operaciones que puede corromper los datos. En el banco, los cajeros sincronizan el acceso colocando pequeñas notas en los archivos. El equivalente en multithreading es colocar un bloqueo sobre el objeto. Cuando algún objeto esta bloqueado por algún thread sólo ese thread puede acceder a él. III.2.1. synchronized La palabra reservada synchronized sirve para hacer que un bloque de código o un método sea protegido por un cerrojo interno de los objetos. Los threads tienen que adquirir el cerrojo del objeto (obj) para ejecutar el código sincronizado: synchronized(obj) // bloque de código sincronizado Si todas las secciones críticas están en el código de un único objeto, podemos utilizar this para reverenciarlo: synchronized(this) // bloque de código sincronizado 65
9 El cuerpo entero de un método puede ser código sincronizado: tipo metodo(...) synchronized(this) // código del método sincronizado La siguiente construcción es equivalente a la anterior: synchronized tipo metodo(...) // código del método sincronizado La sincronización obliga a que la ejecución de dos threads sea mutuamente excluyente en el tiempo. III.2.2. Monitores La forma de crear un monitor en Java es declarar una clase con sus métodos sincronizados, como por ejemplo: Un monitor que implementa un contador cuyo código se muestra a continuación: class Contador private int actual; // MONITOR CONTADOR!!! public Contador(int actual) this.actual=actual; public synchronized void inc() actual++; public synchronized void dec() actual--; public synchronized int valor() return actual; class Usuario extends Thread private Contador cnt; // Clase hilo usuario!!! public Usuario(String nombre, Contador cnt) super(nombre); this.cnt=cnt; for(int i=0; i<10; i++) cnt.inc(); 66
10 System.out.println("Hola, soy "+this.getname()+ ", mi Contador vale "+cnt.valor()); public static void main(string[] args) Contador cnt= new Contador(0); Usuario u1=new Usuario("Mario",cnt/*new Contador(0)*/); Usuario u2=new Usuario("Pedro",cnt/*new Contador(100)*/); Usuario u3=new Usuario("Juan",cnt/*new Contador(-20)*/); u1.start(); u2.start(); u3.start(); Donde una corrida de ejecución daría posiblemente el resultado siguiente: III.2.3. Métodos de espera y notificación El mecanismo de bloqueo synchronized es suficiente para evitar que los threads interfieran entre sí, pero también hace falta una forma de comunicación entre un thread y otro. Con este fín, se define el método wait para permitir que se espere hasta que se produce una situación y se define notify para decir a los que esperan que ha ocurrido algo. Esta es la definición de lo que se conoce como variable de condición. III Variables de Condición Los métodos wait y notify se definen en la clase Object y son heredados por todas las clases. Se aplican a objetos concretos. En un modelo de lectores/escritores, cuando el 67
11 lector espera (wait) un suceso, está esperando a que algún otro thread le notifique (notify) ese suceso sobre el mismo objeto en el que está esperando. El thread que espera una condición debe hacer algo como lo siguiente: synchronized void dowhencondition() while (!condition) wait( ); //Hacer lo que hay que hacer cuando la condición es cierta Aquí pasan una serie de cosas: Todo se ejecuta en un método sinchronized. Esto debe ser así, de lo contarior, los contenidos del objeto no son estables. Por ejemplo, si el método no es synchronized, después de la sentencia while no hay garantía de que la condición sea trae, porque algún otro thread puede haber cambiado la situación comprobada por la condición. Uno de los aspectos más importantes de la definición de wait es que cuando suspende el thread libera atómicamente el bloqueo sobre el objeto. Es decir, la suspensión del thread y la liberación del bloqueo ocurren juntos de manera indivisible. De lo contrario, habría un riesgo de carrera: podría producirse un notify después de que se liberara el bloqueo pero antes de que se suspendiera el thread. El notify no tendría efecto sobre el thread y se perdería. Cuando se reinicia un thread después de haber sido modificado se vuelve a obtener el bloqueo. La prueba de la condición debe estar siempre en un bucle. No hay que suponer nunca que ser despertado significa que se ha satisfecho la condición. Dicho de otra forma, no hay que cambiar el while por el if. Por otra parte, el método notify es invocado por métodos que cambian datos que pueden estar esperando algun otro thread. Synchronized void changecondition( ) // Cambiar algún valor usado en una variable de condición notify(); Pueden estar esperando múltiples threads sobre el mismo objeto. Al usar notify se despierta uno de los threads en espera. Como no es posible predecir cuál, habitualmente se despiertan todos los threads en espera usando notifyall. El siguiente ejemplo muestra el problema del productor/consumidor analizado en el capítulo II de estas notas en sus tres versiones concurrentes: public class BufferCirc private final int BUFSIZE=8; private int bufin; private int bufout; private int[] buffer; public BufferCirc() 68
12 bufin=0; bufout=0; buffer=new int[bufsize]; public synchronized int get_item() int valor; valor=buffer[bufout]; bufout=(bufout+1)%bufsize; return valor; public synchronized void put_item(int item) buffer[bufin]=item; bufin=(bufin+1)%bufsize; III Problema del Productor/Consumidor con buffer circular (versión 1): public class Productor extends Thread private int sumatam; private BufferCirc buf; public Productor(int sumatam, BufferCirc buf) this.sumatam=sumatam; this.buf=buf; for(int i=1;i<=sumatam;i++) System.out.println("Se ejecuta prducer "+i); buf.put_item(i*i); public class Consumidor extends Thread private int sumatam; private BufferCirc buf; public int sum; public Consumidor(int sumatam, BufferCirc buf) this.sumatam=sumatam; this.buf=buf; sum=0; 69
13 for(int i=1;i<=sumatam;i++) System.out.println("Se ejecuta consumer "+i); sum+=buf.get_item(); System.out.println("Suma= "+sum); public class ProdCons1 public static void main(string[] args) int total=0; for (int i=1;i<=100;i++) total+=i*i; System.out.println("La SUMA actual debe ser "+total); BufferCirc buffer=new BufferCirc(); Productor p1=new Productor(100,buffer); Consumidor c1=new Consumidor(100,buffer); p1.start(); c1.start(); try p1.join(); c1.join(); catch(interruptedexception e) Salida de ejecución: 70
14 III Problema del Productor/Consumidor con buffer circular (versión 2): public class Productor2 extends Thread private int sumatam; private BufferCirc buf; public Productor2(int sumatam, BufferCirc buf) this.sumatam=sumatam; this.buf=buf; for(int i=1;i<=sumatam;i++) System.out.println("Se ejecuta prducer "+i); buf.put_item(i*i); Thread.yield(); public class Consumidor2 extends Thread private int sumatam; private BufferCirc buf; public int sum; public Consumidor2(int sumatam, BufferCirc buf) this.sumatam=sumatam; this.buf=buf; sum=0; 71
15 for(int i=1;i<=sumatam;i++) System.out.println("Se ejecuta consumer "+i); sum+=buf.get_item(); Thread.yield(); System.out.println("Suma= "+sum); public class ProdCons2 public static void main(string[] args) int total=0; for (int i=1;i<=100;i++) total+=i*i; System.out.println("La SUMA actual debe ser "+total); BufferCirc buffer=new BufferCirc(); Productor2 p1=new Productor2(100,buffer); Consumidor2 c1=new Consumidor2(100,buffer); p1.start(); c1.start(); try p1.join(); c1.join(); catch(interruptedexception e) Salida de Ejecución: 72
16 III Problema del Productor/Consumidor con buffer circular (versión 3): public class BufferCirc3 private final int BUFSIZE=8; private int bufin; private int bufout; private int[] buffer; public int nslots; public int nitems; public int producer_done; public BufferCirc3() bufin=0; bufout=0; buffer=new int[bufsize]; nslots=8; nitems=0; producer_done=0; public synchronized void wait_slot_lock() try while (nslots<=0) wait(); catch(interruptedexception e) nslots--; public synchronized boolean wait_item_lock() try while((nitems<=0)&&(producer_done==0)) wait(); catch(interruptedexception e) if ((nitems<=0)&&(producer_done==1)) return true; nitems--; 73
17 return false; public synchronized void notify_slot_lock() nslots++; notify(); public synchronized void notify_item_lock() nitems++; notify(); public synchronized void put_done() producer_done=1; notify(); public synchronized int get_item() int valor; valor=buffer[bufout]; bufout=(bufout+1)%bufsize; return valor; public synchronized void put_item(int item) buffer[bufin]=item; bufin=(bufin+1)%bufsize; public class Productor3 extends Thread private int sumatam; private BufferCirc3 buf; public Productor3(int sumatam, BufferCirc3 buf) this.sumatam=sumatam; this.buf=buf; for(int i=1;i<=sumatam;i++) buf.wait_slot_lock(); System.out.println("Se ejecuta PRODUCER "+i); buf.put_item(i*i); buf.notify_item_lock(); buf.put_done(); public class Consumidor3 extends Thread 74
18 private int sumatam; private BufferCirc3 buf; public int sum; public Consumidor3( int sumatam, BufferCirc3 buf) this.sumatam=sumatam; this.buf=buf; sum=0; pub lic void run() for(int i=1;i<=sumatam;i++) boolean band=buf.wait_item_lock(); if (band) break; System.out.println("Se ejecuta consumer "+i); sum+=buf.get_item(); buf.notify_slot_lock(); System.out.println("Suma= "+sum); public class ProdCons3 public static void main(string[] args) int total=0; for (int i=1;i<=100;i++) total+=i*i; System.out.println("La SUMA actual debe ser "+total); BufferCirc3 buffer=new BufferCirc3(); Productor3 p1=new Productor3(100,buffer); Consumidor3 c1=new Consumidor3(100,buffer); p1.start(); c1.start(); try p1.join(); c1.join(); catch(interruptedexception e) salida de ejecución: 75
19 III wait y notify Hay tres formas de wait y dos de notify. Todas ellas son métodos de la clase Object y operan sobre el thread actual. public final void wait(long timeout)throws InterruptedException: El thread actual espera hasta que es notificado o hasta que expira el lapso de tiempo (timeout) especificado en milisegundos. Si es cero, no habrá lapso de tiempo para wait sino que seguirá hasta la notificación. public final void wait(long timeout, int nanos)throws InterruptedException: Un wait de resolución más alta, en el que el intervalo de tiempo es la suma de dos parámetros: timeout en milisegundos y nanos (en nanosegundos en el rango ). 76
20 public final void wait( )throws InterruptedException: Equivale a wait(0). public final void notify(): Notifica como máximo a un thread a la espera de que cambia una condición. public final void notifyall(): Notifica a todos los threads que estan a la espera de que cambie una condición. Estos métodos se implementan en Object. Sin embargo, pueden ser invocados sólo desde dentro de código synchronized, usando el bloqueo para el objeto sobre el que son invocados. La invocación puede ser directa, desde el código sincrhonized o indirecta, desde un método invocado en ese código. Si se intenta invocar estos métodos sobre objetos situados fuera del código synchronized que ha obtenido el bloqueo se lanzará una IllegalMonitorStateException. III.3. ESTADOS DE UN HILO Un hilo Java o thread puede estar en alguno de los siguientes estados: Nuevo cuando el objeto hilo es creado: Thread t= new Thread(...); Ejecutable cuando se invoca al método start( ) de un hilo: t.start( ); Ejecutándose cuando el hilo esta ejecutándose en algún CPU de una computadora. Si un hilo en este estado ejecuta el método yield( ), deja el procesador y pasa al estado ejecutable: Thread.yield(); //yield es un método static de Thread Suspendido cuando un hilo en estado ejecutable o ejecutándose invoca su método suspend: t.suspend( ). El hilo vuelve a su estado ejecutable cuando su método resume() es invocado por otro hilo: t.resume(); Bloqueado cuando llama al método sleep( ), volviendo al estado ejecutable cuando retorne la llamada: Thread.sleep(tiempo_milisegundos); // método estático. Cuando llama a wait( ) dentro de un bloque o un método sincronizado, volviendo al estado ejecutable cuando otro hilo llame a notify o a notifyall. Cuando llama a join( ) para sincronizarse con la terminación de otro hilo que aun no ha terminado: t.join(). Cuando ejecuta alguna operación de entrada/salida bloqueante. Bloqueado-Suspendido cuando el hilo, estando bloqueada, es suspendida por otro hilo. Si la operación bloqueante termina, el hilo pasa al estado suspendido. Si, aún estando bloqueada, otro hilo llama a su método resume( ), el hilo vuelve al estado bloqueado. Muerto cuando su método run( ) termina o si su método stop( ) es invocado: t.stop(). 77
21 III.4. PRIORIDADES Y PLANIFICACION DE THREADS Cada hilo tiene una prioridad que afecta a su planificación. La prioridad de un thread es inicialmente la misma que la del thread que lo creo. La prioridad se puede cambiar usando setpriority( ) con un valor entero situado entre las constantes de Thread.MIN_PRIORITY y MAX_PRIORITY. La prioridad estandar de threads por defecto es Thread.NORM_PRIORITY. La prioridad de un thread en ejecución se puede cambiar en cualquier momento. El método getpriority( ) devuelve la prioridad de un thread. Por tanto, la obtención y cambio de prioridad actual de un hilo se llevan a cabo usando getpriority() y setpriority(). Ejemplo: hilo = new Thread(objeto); hilo.setpriority(hilo.getpriority()-1); hilo.start(); Existen diversas situaciones que provocan la planificación de un nuevo hilo. Cuando el hilo actual: Termina Se bloquea Se para (sleep()) Se suspende Ejecuta yield() Otro hilo de mayor prioridad pasa al estado ejecutable La planificación de un thread actual se controla con los métodos de clase ya mencionados: sleep( ) e yield(). 78
Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente.
Threads (hilos) Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente. Conceptos: Proceso (thread o hilo): es un programa en ejecución
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()
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
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
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
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
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:
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
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
75-62 Técnicas de Programación Concurrente II 2004 java Threads
75-62 Técnicas de Programación Concurrente II 2004 java Threads FIUBA Ing. Osvaldo Clúa Bibliografía: tutorial de Java en http://java.sun.com Un buen libro (algo teórico) es Garg: Concurrent and Distributed
CONCURRENCIA EN JAVA. Diseño de Sistemas Operativos Avanzados 2000/2001. Pedro Pablo Gómez Martín
CONCURRENCIA EN JAVA Diseño de Sistemas Operativos Avanzados 2000/2001 Pedro Pablo Gómez Martín Concurrencia en Java 1 ÍNDICE ÍNDICE... 1 INTRODUCCIÓN... 3 CREAR UNA NUEVA HEBRA... 3 FINALIZACIÓN... 5
Hebras y Sincronización en Java
Hebras y Sincronización en Java Jonathan Makuc http://jmakuc.ublog.cl Noviembre 2008 Tópicos: 1. Introducción a hebras en Java...2 2. Hebras a través del clase Thread...3 3. Hebras a través de la interfaz
Si bien Pascal-FC no trae algunas de las características de Pascal como:
PROCESOS VS. HILOS: Ciclo de vida de un proceso: es prácticamente un estándar en todos los sistemas operativos. En principio el proceso no existe, es creado, luego pasa a listo (el proceso esta en condiciones
Programación Concurrente. Curso Java 2012, 2013 Juan Manuel Fernández Peña
Programación Concurrente Curso Java 2012, 2013 Juan Manuel Fernández Peña Programación secuencial Hasta ahora se ha trabajado con programas secuenciales Se ejecuta paso a paso Son deterministas: si se
Benemérita Universidad Autónoma del Estado de Puebla
Benemérita Universidad Autónoma del Estado de Puebla Facultad de Cs. De la Computación Programación Concurrente y Paralela Práctica de Laboratorio No. 5 Profr: María del Carmen Cerón Garnica Alumno: Roberto
Monitores Ing. Iván Medrano Valencia
Universidad Nacional de San Antonio Abad del Cusco Departamento Académico de Informática Programación Concurrente y Distribuida Práctica 5 1. OBJETIVO. Ing. Iván Medrano Valencia En esta práctica, comprobaremos
Programación Concurrente en Java
Programación Concurrente en Java Curso 2006-2007 9/2/2007 Prog. Distribuida Bajo Internet Qué es la Programación Concurrente? Diseño basado en varias actividades independientes Conceptualmente se ejecutan
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
Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.
SISTEMAS INFORMÁTICOS I Junio 2003 INGENIERÍA EN INFORMÁTICA - Código Carrera 55 - Código Asignatura 077 Tipo de Examen: A NO SE PERMITE EL USO DE NINGÚN MATERIAL Tiempo: 2 horas Apellidos: Nombre: DNI:
IMPLEMENTACIÓN DE REDES DE PETRI CON TIEMPO EN JAVA
DEPARTAMENTO DE INFORMÁTICA E INGENIERÍA DE SISTEMAS LÍNEA DE INVESTIGACIÓN IMPLEMENTACIÓN DE REDES DE PETRI CON TIEMPO EN JAVA TRABAJO DE INVESTIGACIÓN Director: José Luís Villarroel Salcedo Doctorando:
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
Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas
2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos
Object 1. Threads en Java
Object 1 Threads en Java Introducción En este artículo voy a explicar cómo se usan los threads en Java (también traducidos como "hilos de ejecución"). La intención no es solamente explicar cuáles son las
Concurrencia en Android LSUB, GYSC, URJC
Concurrencia en Android LSUB, GYSC, URJC Repaso de concurrencia en Java Crear un thread Instanciar un Thread, con el método run sobreescrito Intanciar un objeto que cumpla el interfaz Runnable y pasárselo
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
(THREADS) Ing. Laura Sandoval Montaño, Ing. Manuel Enrique Castañeda Castañeda PAPIME 104911
(THREADS) HILOS JAVA La Máquina Virtual Java (JVM) es un sistema multihilo. La JVM gestiona todos los detalles, asignación de tiempos de ejecución, prioridades, etc., de forma similar a como gestiona un
Programación multihebra
Programación multihebra by Scheme the API man 2000 ([email protected]) Qué es la programación multihebra? Podemos definir la programación multihebra o multihilo como un estilo de ejecucion en el que
PROGRAMACION CONCURRENTE Y DISTRIBUIDA. III.3 Concurrencia con Java: Sincronización
PROGRAMACION CONCURRENTE Y DISTRIBUIDA III.3 Concurrencia con Java: Sincronización J.M. Drake L.Barros 1 Recursos de Java para sincronizar threads Todos los objetos tienen un bloqueo asociado, lock o cerrojo,
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
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
Java Avanzado Facultad de Ingeniería. Escuela de computación.
2 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 5 3 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo de sus prácticas
3. PROGRAMACION CONCURRENTE
3. PROGRAMACION CONCURRENTE INTRODUCCION Actualmente observamos que el paradigma orientado a objetos, solo podemos ejecutar un equipo a la vez como máximo en cambio con la introducción de las hebras concurrentes(programación
Instrucciones de control
Instrucciones de control Instrucciones de control de flujo C# ofrece un conjunto de sentencias similar al de C, C++ o Java. A continuación se estudian muy brevemente cada una de ellas. if if se utiliza
FACULTAD DE INGENIERÍA
NOMBRE DEL PROFESOR: Ing. Héctor Manuel Quej Cosgaya NOMBRE DE LA PRÁCTICA: Estructuras de decisión PRÁCTICA NÚM. [ 5 ] LABORATORIO: MATERIA: UNIDAD: TIEMPO: Centro de Ingeniería Computacional Lenguaje
Java y JVM: programación concurrente
Java y JVM: programación concurrente Adolfo López Díaz Escuela de Ciencias de la Computación e Informática. Universidad de Costa Rica Resumen: El lenguaje de programación Java proporciona, sin necesidad
Programación Orientada a Objetos (POO)
Programación Orientada a Objetos (POO) Introducción La programación orientada a objetos es una técnica de programación en la cual expresamos el código en términos relacionados a como vemos las cosas en
BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA EDUCACIÓN MEDIA SUPERIOR
BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA EDUCACIÓN MEDIA SUPERIOR FACULTAD DE CIENCIAS DE LA COMPUTACIÓN REPORTE DE LOS PROGRAMAS DE MONITORES ALUMNOS: MARCELA PAOLA ESTRADA GARCÍA JAMELLI VAZQUEZ JUAREZ
Concurrencia. Primitivas IPC con bloqueo
Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región
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
Programación orientada a objetos. Capítulo 8 Mejora de las estructuras mediante herencia
Programación orientada a objetos Capítulo 8 Mejora de las estructuras mediante herencia Clases y objetos de DoME Modelo de objetos Modelo de clases Crítica de la v1 de DoME - Duplicación de código - Las
Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.
Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1
Clase adicional 2. Estructuras básicas de control. Temas
Clase adicional 2 Temas Estructuras de control Sentencia condicional Iteración Clases Definir una clase Crear una instancia de una clase Campos estáticos Problemas de la clase adicional Problema de diseño
Benemérita Universidad Autónoma del Estado de Puebla
Benemérita Universidad Autónoma del Estado de Puebla Facultad de Cs. De la Computación Programación Concurrente y Paralela Práctica de Laboratorio No. 4 Profr: María del Carmen Cerón Garnica Alumno: Roberto
Este capítulo cubre los siguientes aspectos, de los objetivos del examen de certificación en Java:
7. Hilos Objetivos Este capítulo cubre los siguientes aspectos, de los objetivos del examen de certificación en Java: Escribir código para definir, instanciar e iniciar nuevos hilos usando java.lang.thread
Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta
Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...
2. Estructura de un programa en Java
24 A. García-Beltrán y J.M. Arranz 2. Estructura de un programa en Java Objetivos: a) Describir la estructura del código fuente de una aplicación Java b) Presentar los conceptos de comentario y de identificador
TEMA 6: API Java para Concurrencia de Alto Nivel
TEMA 6: API Java para Concurrencia de Alto Nivel CONTENIDO API Java 5 de Control de la Concurrencia Clases para Gestión de Variables Atómicas Clase java.concurrent.util.concurrent.semaphore Clase java.concurrent.util.concurrent.cyclicbarrier
UNIDAD 3 CONCURRENCIA Y TRABAJO EN RED
UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL CÓRDOBA DEPARTAMENTO DE SISTEMAS DE INFORMACIÓN CÁTEDRA: PARADIGMAS DE PROGRAMACIÓN APUNTE TEORICO-PRACTICO UNIDAD 3 CONCURRENCIA Y TRABAJO EN RED AUTORES
Práctica 1. Monitores en Java.
Práctica 1 - Programación Concurrente 3º I.S. Pág: 1/15 Práctica 1. Monitores en Java. Programación Concurrente. 3º I.S. Dpto. Lenguajes y Sistemas Informáticos Escuela Técnica Superior de Ingeniería Informática
Hilos. Índice. Copyright 2012-13 Dept. Ciencia de la Computación e IA All rights reserved.
Índice 1 Creación de hilos... 2 2 Ciclo de vida y prioridades...3 2.1 Prioridades de los hilos... 4 2.2 Interrupción de un hilo...4 3 Sincronización de hilos... 5 3.1 Sincronización reentrante...6 4 Bloques
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
Principios de Computadoras II
Departamento de Ingeniería Electrónica y Computadoras Ing. Ricardo Coppo [email protected] Qué es un Objeto? Un objeto es una instancia de una clase Las clases actuán como modelos que permiten la creación
Arquitecturas cliente/servidor
Arquitecturas cliente/servidor Servidores y Clientes Sincronizados Contenido Procesos Semáforos Sincronización Lectura y Escritura de Archivos Servidores Orientados a Conexión Servidores No Orientados
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
Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.
Tipos de Datos Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Entrada de datos Procesamientos de datos Salida de resultados Los
Programación Concurrente y Paralela. P(S) ; sección crítica P(S);
2.5.2 Monitores Los semáforos, a pesar de su sencillez de uso, son el equivalente a las instrucciones goto y el manejo de apuntadores en los lenguajes de programación imperativos: son muy susceptibles
Otras formas de Sincronización en Java
75-62 Técnicas de Programación Concurrentes II Lic. Ing. Osvaldo Clúa 2008 Facultad de Ingeniería Universidad de Buenos Aires Otras formas de Sincronización en Java java.util.concurrent Class Exchanger
PROGRAMACION ORIENTADA A OBJETOS EN C++
PROGRAMACION ORIENTADA A OBJETOS EN C++ 1- INTRODUCCIÓN El lenguaje C++ representa el resultado de los esfuerzos realizados para proporcionar las ventajas de la programación Orientada a Objetos a un lenguaje
Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.
Tutorial de C# Delegados y Eventos Por: Óscar López, M.Sc. [email protected] DELEGADOS Delegados Son unos objetos que implícitamente extienden de System.Delegate y definen un tipo referencia soportado
Programación Orientada a Objetos
Programación Orientada a Objetos Sentencias Java Parte II Ing. Julio Ernesto Carreño Vargas MsC. while y do while Sentencia while Ciclo mientras que Repite una acción mientras su condición de ciclo se
INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA
Objetivo: Identificar los concentos principales en java POO, que es una clase, un objeto así como sus características principales abstracción, modularidad, encapsulamiento, herencia, polimorfismo. INTRODUCCIÓN
class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }
REUTILIZACIÓN DE CLASES:MODELO DE HERENCIA EN JAVA Java soporta herencia simple pero no múltiple. Lo hace mediante el mecanismo de extensión de clase. A partir de él, una subclase se extiende (hereda)
INDICE Prefacio 1. Fundamentos de Java 2. Introducción a los tipos de datos y operadores
INDICE Prefacio XVII 1. Fundamentos de Java 1 Los orígenes de Java 2 Como se relaciona Java con C y C++ 4 Contribución de Java a Internet Los Apples de Java y aplicaciones 6 Seguridad Portabilidad 7 La
Modulo 11. Clases y Objetos en Java
El siguiente texto es una traducción no oficial del documento publicado por el grupo JEDI, Introduction to Programming 1, no pretende en ningún momento reemplazar los contenidos generados por este grupo.
Hilos en Java. Crear un Hilo. Detener un hilo. Fuente: http://www.chuidiang.com/java/hilos/hilos_java.php
Fuente: http://www.chuidiang.com/java/hilos/hilos_java.php Hilos en Java A veces necesitamos que nuestro programa Java realice varias cosas simultáneamente. Otras veces tiene que realizar una tarea muy
Threads o Hilos. Marco Besteiro y Miguel Rodríguez
En.NET, cuando se lanza una aplicación se crea un proceso y dentro de este proceso un hilo de ejecución o thread para el método Main. Es posible, a la vez que se ejecuta el método Main, que la aplicación
Una Clase: define un grupo de objetos que tienen propiedades similares y se comportan de manera similar.
Clases La programación orientada a objetos utiliza clases para encapsular (envolver, esconder) datos (atributos) y métodos (comportamientos). Por ejemplo, el estéreo de un auto encapsula todos los atributos
Manipulación de procesos
Manipulación de procesos Las primeras computadoras solo podían manipular un programa a la vez. El programa tenía control absoluto sobre todo el sistema. Con el desarrollo vertiginoso del hardware ese panorama
Java en 2 horas. Rodrigo Santamaría
+ Java en 2 horas Rodrigo Santamaría + Generalidades 2 Desarrollado por Sun en 1995 Hereda mucha de la sintaxis de C (1972) Fuertemente tipado y orientado a objetos Aplicaciones compiladas a bytecode Gestión
CONCEPTOS BASICOS DEL LENGUAJE JAVA
CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten
1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)
. Sobrecarga de operadores. unarios Operador de incremento (prefijo). Devolución de objetos en los métodos. Retorno por referencia Sobrecarga de operadores Los operadores aceptan uno o varios operandos
CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas
CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas 8 Comunicación y sincronización basada en variables compartidas...2 8.1 Exclusión mutua y condición de sincronización....2 8.2
Tema 2. El lenguaje JAVA
Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias
Estructuras en LabVIEW.
Estructuras en LabVIEW. Sumario: 1. Ejecución según el flujo de datos. 2. Estructuras básicas disponibles en LabVIEW. a) Estructura Sequence. b) Estructura Case. c) Estructura For Loop. d) Estructura While
DESARROLLO DE APLICACIONES PARA CONTROL Y MONITOREO DE DISPOSITIVOS REMOTOS
UNIDAD IZTAPALAPA DIVISIÓN DE CIENCIAS BÁSICAS E INGENIERIA DESARROLLO DE APLICACIONES PARA CONTROL Y MONITOREO DE DISPOSITIVOS REMOTOS PARA OBTENER EL TITULO DE LICENCIADO EN COMPUTACION PRESENTAN: CRISÓSTOMO
Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle
Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Asertos en C++ Mecanismo de excepciones: Declaración de excepciones Lanzar excepciones
Herramientas Concurrentes en JAVA
Herramientas Concurrentes en JAVA David Jesús Horat Flotats ÍNDICE 1. Introducción n a Java 2. Herramientas Concurrentes en Java 3. Lectores Escritores (2º) 4. Filósofos comensales 5. Chat usando RMI 6.
Sistemas Operativos. Dr. Luis Gerardo de la Fraga. Departamento de Computación Cinvestav
Sistemas Operativos Dr. Luis Gerardo de la Fraga E-mail: [email protected] http://cs.cinvestav.mx/~fraga Departamento de Computación Cinvestav 12 de junio de 2015 Dr. Luis Gerardo de la Fraga Cinvestav,
Tema: Introducción al IDE de Microsoft Visual C#.
Tema: Introducción al IDE de Microsoft Visual C#. Objetivos: El propósito de este tema es que el alumno se familiarice con el entorno de desarrollo de Visual C# Express mientras crea el formulario más
Cada examen debe superarse con al menos un 4 para hacer media.
Concurrencia Pau Arlandis Martínez Sobre las normas Profesores Ángel Herranz 2309 Julio Mariño 2308 Cada lunes se entregará un problema que debe resolverse antes del jueves. Únicamente sirven para practicar
Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez
Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez Sintaxis de Java Sintaxis Define las reglas que determinar el uso de palabras clave, operadores y variables para construir y evaluar expresiones.
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);
Receta general para resolver problemas de sincronización con semáforos
Receta general para resolver problemas de sincronización con semáforos La primera vez que te enfrentas a la tarea de implementar una solución a un problema de sincronización entre procesos, es normal que
Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia
Concurrencia: deberes Concurrencia: Exclusión Mutua y Sincronización Capítulo 5 Comunicación entre procesos Compartir recursos Sincronización de múltiples procesos Asignación del tiempo de procesador Concurrencia
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS Caso 1: 1.- Necesitamos un cd o Dvd para grabar alguna de las versiones de livecd de Linux. 2.- Liga de una
Introducción a la Programación Orientada a Objetos
Introducción a la Programación Orientada a Objetos El paradigma imperativo. En un programa se tienen una serie de variables con las cuales operamos y modificamos mediante sentencias y funciones para producir
QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B)
APRENDERAPROGRAMAR.COM QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B) Sección: Cursos Categoría: Curso Aprender programación Java desde cero Fecha revisión:
HP - UX. Qué es HP UX?
HP - UX Integrantes: Cisneros Pedraza Christian. Jiménez Nieves José Manuel. Villanueva Armenta Fernando. Qué es HP UX? Hp UX es una variante de Unix creada por los desarrolladores de software de HP. Provee
En este capitulo se estudiarán los conceptos relacionados a métodos, como lo son sobrecarga, métodos estáticos.
Lección 3: Creando clases 1. Definición de métodos 2. Sobrecarga de métodos 3. Definición de constructores 4. Creando miembros estáticos 5. Construcción e inicialización de objetos Objetivos En este capitulo
INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA
APUNTES DE JAVA FUNCIONAMIENTO DE UN PROGRAMA Assembler Ensamblador Ejecuta Programador Programa fuente BASIC Interprete Ejecuta C, C++, Pascal Compilador Compila Ejecuta Programa fuente Programa Objeto
16. Herencia Definición de herencia. 168 A. García-Beltrán y J.M. Arranz
168 A. García-Beltrán y J.M. Arranz 16. Herencia Objetivos: a) Definir el concepto de herencia entre clases b) Interpretar el código fuente de una aplicación Java donde aparecen clases relacionadas mediante
Tema 2 Introducción a la Programación en C.
Tema 2 Introducción a la Programación en C. Contenidos 1. Conceptos Básicos 1.1 Definiciones. 1.2 El Proceso de Desarrollo de Software. 2. Lenguajes de Programación. 2.1 Definición y Tipos de Lenguajes
Tema 2. El lenguaje de programación Java (Parte 1)
Programación en Java Tema 2. El lenguaje de programación Java (Parte 1) Luis Rodríguez Baena Facultad de Informática Elementos del lenguaje (I) El juego de caracteres. No utiliza ASCII, sino Unicode de
PROGRAMACION CONCURRENTE Y DISTRIBUIDA. III.1 Concurrencia con Java: Thread Java
PROGRAMACION CONCURRENTE Y DISTRIBUIDA III.1 Concurrencia con Java: Thread Java J.M. Drake L. Barros 1 Concurrencia en Java. Java posibilita la programación concurrente a través de threads. Los threads
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
INTRODUCCION A LA PROGRAMACION EN JAVA
Departament d Arquitectura de Computadors INTRODUCCION A LA PROGRAMACION EN JAVA Índice Paso de parámetros en tiempo de ejecución Métodos static Atributos static Try-catch-finally Throws/throw 2 Paso de
Modelo de Objetos Distribuidos
Remote Method Invocation Modelo de Objetos Distribuidos Un objeto remoto es un objeto cuyos métodos pueden ser invocados desde otra máquina virtual de java, potencialmente en un host diferente. Modelo
