Hebras y Sincronización en Java
|
|
|
- Beatriz Soto Segura
- hace 10 años
- Vistas:
Transcripción
1 Hebras y Sincronización en Java Jonathan Makuc Noviembre 2008 Tópicos: 1. Introducción a hebras en Java Hebras a través del clase Thread Hebras a través de la interfaz Runnable Trabajo con hebras y buenas prácticas Elementos de Sincronización...11
2 1. Introducción a hebras en Java El presente tutorial tiene por objetivo explicar de forma simple y práctica el trabajo básico con hebras en Java, en cuanto a su creación, correcto uso y sincronización. Para un estudio más acabado, refiérase al Tutorial de concurrencia en Java de Sun en Computacionalmente se define como hebra como una unidad de procesamiento de datos, la cual es más liviana que un proceso, entendiendo como proceso a un programa en ejecución. Un proceso puede tener bajo su comando a múltiples hebras que realicen trabajos específicos, a veces de forma paralela. Java proporciona 2 formas para trabajar con hebras: extender un Thread o implementar un Runnable. Ambas resultan en la creación de una hebra de usuario, la cual es invisible al sistema operativo, como se muestra en el diagrama a la derecha, por lo tanto no se puede establecer prioridades de ejecución de hebras Java en el scheduler del sistema operativo. Hebra JVM Hebra Las hebras pueden tener un nombre de identificación, prioridad de ejecución Sistema Operativo (a mayor prioridad, más probabilidad de ejecutarse) y la posibilidad de indicar si son hebras demonio. La JVM posee en su interior un scheduler que se encarga de calendarizar la ejecución de las hebras, manejo de prioridades, creación y destrucción, etc. Al partir la JVM (Java Virtual Machine), se crea una hebra inicial la cual ejecuta al método main. La ejecución continúa hasta que se invoque al método exit de la clase Runtime, o que todas las hebras que no son demonios han terminado. Página 2 de 14
3 2. Hebras a través del clase Thread La clase Thread es la forma real en la cual se crea una nueva hebra en Java. Sus constructores permite establecer nombre, grupo, Runnable a ejecutar y en algunas plataformas tamaño del snack. Esta clase forma parte del lenguaje base de java y se encuentra en el paquete java.lang. La forma tradicional de trabajar con la clase Thread, es extenderla. Para hacer esto, se debe implementar el método run, el cual contendrá el código real a ejecutarse en la nueva hebra. A la derecha vemos el código fuente de una hebra simple de ejemplo la cual recibe como único parámetro de su constructor el nombre que tendrá esta hebra. El constructor es utilizado para inicializar correctamente la hebra pero no inicia su ejecución. Para iniciar la ejecución de la hebra se debe invocar al método start(). En el ejemplo se muestra como se declara la clase MiHebra y luego en el método main se instancia el objeto y luego se corre el código que esta contiene. De esta forma se pueden lanzar múltiples hebras del tipo MiHebra que se ejecuten en paralelo, donde cada una de ellas ejecutará el código contenido en el método run(). class MiHebra extends Thread { public MiHebra(String nombre) { this.setname(nombre); // CODIGO DE LA HEBRA AQUI public static void main(string[] args) { MiHebra hebra1 = new MiHebra( 1 ); Hebra1.start(); Página 3 de 14
4 3. Hebras a través de la interfaz Runnable Una forma alternativa de poder construir el código a ejecutarse dentro de una nueva hebra, es a través de la interfaz Runnable. Esta segunda opción es útil cuando se tienen clases que ya están heredando y además se requiere que ejecuten en paralelo. Todo objeto que implemente la interfaz Runnable debe implementar el método run(), que al igual como sucede con la clase Thread, contiene el código real a ejecutar en la hebra. class MiRunnable implements Runnable { // CODIGO DE LA HEBRA AQUI public static void main(string[] args) { MiHebra hebra1 = new MiHebra(new MiRunnable(), trabajador 1 ); Hebra1.start(); MiHebra hebra2 = new MiHebra(new MiRunnable(), trabajador 2 ); Hebra1.start(); En este ejemplo tenemos la clase MiRunnable que implementa correctamente a Runnable. Para poder ejecutar el código dentro del método run, se debe instanciar el Runnable y pasarlo como parámetro al constructor de un Thread. Desde aquí el manejo de la hebra es idéntico al descrito anteriormente. Página 4 de 14
5 4. Trabajo con hebras y buenas prácticas 4.1. Hebras Demonio Se denomina demonio a un proceso que corre en segundo plano, encargado de prestar un servicio. Java entrega la posibilidad de indicar que un Thread es demonio. No existe ninguna diferencia física entre una hebra demonio y una normal, pero si como estas influyen en el comportamiento del programa principal, puesto que JVM termina cuando todas las hebras nodemonio han finalizado, es decir, si existe al menos 1 hebra no-demonio funcionando, el programa seguirá ejecutándose, aunque este programa no realice ninguna acción. Los demonios son útiles para encapsular código de servicio a otros procesos (como limpieza, programación de tareas, etc.), los cuales no tienen utilidad luego de que el último proceso de primer plano ha terminado. Así, simplificamos la programación de nuestra aplicación dado que no hay que preocuparse por detener las hebras secundarias o de apoyo, puesto que la JVM lo hará por nosotros. class MiDemonio extends Thread { public MiDemonio(String nombre) { this.setname(nombre); this.setdaemon(true); // CODIGO DEL DEMONIO AQUI Página 5 de 14
6 4.2. Iniciar y detener Ya hemos visto como iniciar una hebra, invocando al método start(), pero detenerla no es tan simple. Si bien la clase Thread provee el método stop(), este se encuentra deprecado hace muchas versiones del lenguaje y no se recomiendo utilizarlo bajo ningún punto de vista. El motivo es que invocar a stop() provoca la liberación de todos los monitores que sostiene la hebra, a medida que la excepción ThreadDeath se propaga por el stack. Esta liberación anticipada puede poner en funcionamiento a hebras que se encuentran en estados inconsistentes o que están por ingresar a regiones críticas que no han concluido su ejecución; resultando esto un comportamiento impredecible en la computación final. Para más información, puede referirse al artículo de Sun Java Thread Primitive Deprecation en La forma correcta de programar una hebra, es a través de una variable booleana que indique si continuar la ejecución o no, en conjunto con la reescritura del método stop seteando esta variable en falso. class MiDemonio extends Thread { private corriendo = true; public MiDemonio(String nombre) { this.setname(nombre); this.setdaemon(true); while(corriendo) { // CODIGO DEL DEMONIO AQUÍ public synchronized void stop() { this.corriendo = false; De esta manera es posible planear el funcionamiento del programa correctamente, evitando problemas producto de la terminación a medias de una hebra. Estos errores suelen ser los más difícil de encontrar en una aplicación y por tanto deben tomarse todas las medidas preventivas posibles. Página 6 de 14
7 4.3. Yield y currentthread La clase Thread provee 2 métodos interesantes que cabe mencionar. Por una parte se tiene el método estático currentthread(), el cual retorna un puntero a la hebra que esta actualmente ejecutándose en este proceso java. class MiDemonio extends Thread { Thread yo = Thread.currentThread(); El método yield() por su parte, cede el tiempo de CPU que tiene esta hebra, a la siguiente. Útil para procesos demonios y otros códigos donde se realiza una acción condicionada a una verificación, de lo contrario no hace nada. class MiDemonio extends Thread { private corriendo = true; while(corriendo) { if(condicionok) // codigo a ejecutar else yield(); Página 7 de 14
8 4.4. Dormir y esperar Java también provee mecanismos para poder bloquear la ejecución de una hebra por tiempo determinado o poder esperar al término de otra para poder continuar. El método sleep() de Thread permite dormir a la hebra por la cantidad de milisegundos indicados en el parámetro. El método sleep puede ser interrumpido, lanzándose una InterruptedException por lo que debe ir en un bloque try-catch. Más información sobre interrupciones en el siguiente punto. class MiDemonio extends Thread { private corriendo = true; while(corriendo) { // codigo a ejecutar try { sleep(1 * 1000); catch(interruptedexception e) { Por otra parte join() permite que una hebra espere a que otra termine su ejecución. A través de este comando, la hebra que lo invoca queda bloqueada hasta que la termine el método run de la hebra en cuestión. Al igual que el método sleep(), también debe colocarse dentro de un bloque trycatch dado que la hebra a la cual se espera podría terminar de forma interrumpida. public static void main(string[] args) { Hebra hebra1 = new Hebra(); hebra1.start(); try { hebra1.join(); System.out.println( hebra1 ha terminada OK ); catch(interruptedexception e) { Página 8 de 14
9 También existe un método sleep(long milis) y sleep(long milis, int nanos) que permite limitar la cantidad de tiempo de espera. Todas las variaciones solo pueden ser ejecutadas por la hebra para si y no para otras hebras Interrupción Una interrupción es una señal a una hebra para que esta deje de hacer lo que este haciendo y realice alguna otra acción, análogo a las interrupciones de sistema operativo. Para interrumpir a una hebra, se invoca al método interrupt(). Existen 2 manera de que una hebra haga uso de las interrupciones: manejar adecuadamente las InterruptedExceptions y consultar el método interrupted(). Para el primer caso, interrumpimos el bloqueo de una hebra ya sea por invocación a sleep o join. Aquí una hebra externa puede reanudar la ejecución de la hebra detenida forzosamente, produciéndose el lanzamiento de la InterruptedException. HEBRA SLEEP INTERRUMPIDO class Hebra extends Thread { Date inicio = new Date(); try { sleep(10 * 1000); System.out.println( Dormido 10 segundos ) catch(interruptedexception e) { long diff = (new Date()).getTime() inicio.gettime(); System.out.println( Dormido: + diff + milisegundos. ); HEBRA INTERRUPTORA SLEEP public static void main(string[] args) { Hebra h1 = new Hebra(); h1.start(); try { Thread.sleep(1000) catch(interruptedexception e) { h1.interrupt(); Página 9 de 14
10 Nótese como en la hebra main invocamos al método estático sleep, el cual aplica sobre la hebra actual, que claramente es aquella que esta ejecutando el comando. El funcionamiento con join() es análogo. La hebra que esta esperando a que otra termine, ve su bloqueo interrumpido externamente, debiendo manejar correctamente la excepción. Ahora, para el caso de hebras que no tienen sleep o join en un su código, sino que solo ejecución continua de código, es el programador el encargado de verificar periódicamente si se han recibido interrupciones invocando al método interrupted(). class MiDemonio extends Thread { private corriendo = true; while(corriendo) { if(interrupted()) { // manejo de la interrupción // possible termino de la ejecución break; else { // codigo ejecución normal Página 10 de 14
11 5. Elementos de Sincronización 5.1. Generalidades Desde el momento en que se utiliza programación multiproceso o multihebra (concurrente), afloran una serie de problemas sobre el trabajo de los datos por parte de las múltiples hebras. Algo tan simple como i++ puede ser complicado. Esta operación que al parecer es unitaria, son de verdad 3: Consulta del valor de i Aumento del valor en 1 Asignación del nuevo valor a la variable i Imaginemos que existen 2 procesos que trabajan con la misma variable i. Si ambos ejecutan al mismo tiempo las instrucciones, ambos podrían obtener el valor inicial de i (ej: i = 0), sumar 1 al valor (resultado = 1) y asignar ese valor a i, resultando en un resultado final erróneo dado que seria solo 1 unidad más, en caso que debería ser 2. Para solucionar este y otros problemas, existen múltiples soluciones implementadas por hardware y software. Una de las soluciones clásicas son los semáforos. Java incluye además monitores para otorgar otra herramienta de sincronización. Sobre estos elementos, Java incorpora como parte de su distribución J2SE el paquete java.util.concurrent que contiene un conjunto de clases e interfaces listas para su uso en el manejo de la concurrencia. Proceso 1 Programa Proceso 2 class Hebra extends Thread { public static int i = 0; i = 0 i = 1 System.out.println( i = + i); i++; System.out.println( i = + i); i = 0 i = 1 Ejemplo de ejecución errónea cuando se tienen múltiples hebras ejecutando un mismo código Página 11 de 14
12 5.2. Monitores Los monitores son por definición un método de proporcionar exclusión mutua que esta implementado en el lenguaje de programación. Java implementa monitores como parte de su lenguaje base, entregando una herramienta embebida en cada objeto Java, dado que se encuentran en Object. El uso de monitores en Java es muy simple; basta colocar la palabra clave synchronized antecediendo el nombre del método a sincronizar. Esto protegerá que solo 1 hebra a la vez pueda acceder a los todos métodos que se declaren sincronizados dentro de la misma clase. Estos locks a los métodos son reentrantes, es decir, que cuando una hebra ha adquirido el monitor en un método, puede reentrar al mismo método u otro sincronizado sin necesidad de liberarlo. public class Hebra extends Thread { Hebra.metodo(); public static synchronized void metodo() { System.out.println("Hebra ingresada " + Thread.currentThread().getName()); try { Thread.sleep(3000); catch(exception e) { public static synchronized void metodo2() { System.out.println("Ingresada " + Thread.currentThread().getName()); try { Thread.sleep(3000); catch(exception e) { public static void main(string[] main) { Hebra h = new Hebra(); h.start(); Hebra.metodo2(); Por defecto Java sigue ejecutando la hebra que inicie a otra hasta que ocurra el timeslice de la JVM. Así, primero se imprimirá en pantalla Ingreada main y 3 segundos después Hebra ingresada Thread-0. El monitor fue adquirido primero por la hebra main y una vez que sale del método lo libera permitiendo que la hebra Thread-0 pueda adquirirlo. Página 12 de 14
13 Si bien lo monitores Java entregan una solución para la mayoría de los casos, su capacidad de ser adquiridos por una hebra a la vez es una limitante no menor. Supongamos el caso de un objeto centralizador de recursos con múltiples métodos estáticos para acceder a tales recursos. En este caso cuando 1 hebra adquiere el monitor para utilizar 1 recurso, bloquea el acceso a todo el resto de los recursos aun cuando sean independientes. Para solucionar correctamente este problema, se pueden utilizar semáforos Semáforos Los semáforos son una de las soluciones clásicas al problema de concurrencia. Concebidos en 1965 por Dijkstra, son implementados en java a través del objeto java.util.concurrent.semaphore. Formalmente un semáforo es un elemento que lleva en su interior un contador que indica la cantidad inicial de autorizaciones de paso o banderitas. Un proceso al querer entrar a una región crítica 1 adquiere una banderita del semáforo (formalmente en la literatura métodos llamados p() o down() ) y cuando la deja lo libera (formalmente v() o up() ). Si existen banderitas disponibles, entonces el proceso continua su ejecución, de lo contrario queda bloqueado a la espera que otro proceso libere alguna banderita y se pueda continuar. Un ejemplo de utilización de semáforos, puede ser la protección de una variable, de manera que no se produzca el error mencionado en el punto anterior. Un simple semáforo binario (2 estados: con y sin banderita), permite asegurar que solo un proceso a la vez modifique el valor de la variable i. Para esto inicializamos una variable estática (para que sea única entre todas las instancias de la clase) con el semáforo en 1. class MiHebra extends Thread { private static Semaphore mutex = new Semaphore(1); private static int i = 0; while(running) { try { mutex.acquire(); i++; mutex.release(); catch(interruptedexception e) { 1 Región Crítica es aquella porción del código de un programa que al ser ejecutado por más procesos que los intencionados originalmente por el programador, produce un resultado indeterminado en la computación. Página 13 de 14
14 Aquí hemos colocado el match a la InterruptedException, dado que durante la espera de adquisición de semáforo, la hebra podría ser interrumpida externamente. Para evitar este comportamiento se tienen 2 alternativas. La primera es usar el método acquireuninterrumptibly el cual no interrumpe el bloqueo de espera por el semáforo; la segunda es trabajar con el método tryacquire el cual no bloquea la ejecución, retornando true cuando se pudo adquirir el semáforo y false cuando no java.util.concurrent Adicionalmente a los semáforos, Java provee una serie de objetos para el control de la concurrencia listos para su uso. A continuación una breve lista de objetos thread-safe : y su utilidad. Paquete java.util.concurrent ConcurrentHashMap ConcurrentLinkedQueue CyclicBarrier Semaphore Paquete java.util.concurrent.atomic AtomicBoolean AtomicInteger AtomicIntegerArray AtomicLong AtomicReference Paquete java.util.concurrent.lock ReentrantLock Hashmap con operaciones atómicas Lista enlazada con operaciones atómicas. Barreras en Java Semáforos en Java Booleano con operaciones atómicas, incluido testandset. Entero con operaciones atómicas, incluido testandset. Arreglo de enteros con operaciones atómicas, incluido testandset. Real con operaciones atómicas, incluido testandset. Referencia a un objeto (cualquiera) con operaciones atómicas. Lock reentrante, aquel que permite que una misma hebra lo adquiera múltiples veces luego de adquirirlo la primera vez, bloqueando a otras hebras. EOF Jonathan Makuc Página 14 de 14
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
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
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
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
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:
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
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
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
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()
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
Modulo 1 El lenguaje Java
Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto
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
Introducción a la programación orientada a objetos
Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación
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 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
A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante
Modulo 2. Inicio con Java Muchas veces encontramos en nuestro entorno referencias sobre Java, bien sea como lenguaje de programación o como plataforma, pero, que es en realidad Java?, cual es su historia?,
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
Pruebas de unidad con JUnit
Pruebas de unidad con JUnit Cuando se implementa software, resulta recomendable comprobar que el código que hemos escrito funciona correctamente. Para ello, implementamos pruebas que verifican que nuestro
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
Curso de Python Inicial
Logo IAA-CSIC Curso organizado por el Gabinete de Formación del CSIC Curso de Python Inicial Clases Contenidos 1. Paradigmas de la Programación 2. Programación Orientada a objetos 3. Clases 4. Objetos
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
8. Sentencia return y métodos
92 A. García-Beltrán y J.M. Arranz 8. Sentencia return y métodos Objetivos: a) Describir el funcionamiento de la sentencia return b) Interpretar el resultado de una sentencia return en el código fuente
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
COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX
COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX En este manual se presenta el proceso de configuración de una Maquina Virtual en VirtualBox, que será utilizada para instalar un Servidor
Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código
Tema 6 Reutilización de código Programación 2015-2016 Programación - Tema 6: Reutilización de código 1 Tema 6. Reutilización de código Modularidad. Implementación de métodos. Uso de métodos. Programación
Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp...
Contenido Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp... 5 Introducción Es tiempo de hablar en detalle de lo que significa
GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)
APRENDERAPROGRAMAR.COM GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I
Introducción - por qué usarlas?(1)
Excepciones en Java Introducción - por qué usarlas?(1) En el mundo de la programación hay algo que siempre ocurre: los errores en los programas. Pero qué sucede realmente después de que ha ocurrido el
1. Manejo de memoria estática 2. Manejo de memoria dinámica
1. Manejo de memoria estática 2. Manejo de memoria dinámica *La administración de memoria de una computadora es una tarea fundamental debido a que la cantidad de memoria es limitada. *El sistema operativo
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
Clases y Objetos. Informática II Ingeniería Electrónica
Clases y Objetos Informática II Ingeniería Electrónica Los Tipos de Datos Hasta ahora, en un programa podemos usar para representar variables a: Tipos fundamentales : enteros (int), caracteres (char),
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 Inicial (20 horas)
Java Inicial (20 horas) 1 Temario 1. Programación Orientada a Objetos 2. Introducción y Sintaxis Java 3. Sentencias Control Flujo 4. POO en Java 5. Relaciones entre Objetos 6. Polimorfismo, abstracción
EXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es:
EXCEPCIONES EN JAVA Uno de los problemas más importantes al escribir aplicaciones es el tratamiento de los errores. Errores no previstos que distorsionan la ejecución del programa. Las excepciones de Java
Sistemas Operativos. Curso 2016 Procesos
Sistemas Operativos Curso 2016 Procesos Agenda Proceso. Definición de proceso. Contador de programa. Memoria de los procesos. Estados de los procesos. Transiciones entre los estados. Bloque descriptor
Repaso de las características más importantes de la programación Java y su adaptación a Android
Repaso de las características más importantes de la programación Java y su adaptación a Android 1. Entorno de programación en java 2. Variables y tipos de datos 3. Operaciones y operadores 4. Clases y
ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA
ARREGLOS EN JAVA I I N T R O D U C C I Ó N En las sesiones anteriores, los datos manejados en los programas han sido datos simples (carácter, entero, reales) En un gran número de problemas es necesario
4. Programación Paralela
4. Programación Paralela La necesidad que surge para resolver problemas que requieren tiempo elevado de cómputo origina lo que hoy se conoce como computación paralela. Mediante el uso concurrente de varios
Base de datos en Excel
Base de datos en Excel Una base datos es un conjunto de información que ha sido organizado bajo un mismo contexto y se encuentra almacenada y lista para ser utilizada en cualquier momento. Las bases de
Curso de Java POO: Programación orientada a objetos
Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Introducción a la POO 2 Herencia y polimorfismo 3 Empaquetado de proyectos
Programación Orientada a Objetos. Java: Excepciones
Programación Orientada a Objetos Java: Excepciones Eduardo Mosqueira Rey Laboratorio de Investigación y desarrollo en Inteligencia Artificial Departamento de Computación Universidade da Coruña, España
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
MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD
MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD Fecha última revisión: Diciembre 2010 Tareas Programadas TAREAS PROGRAMADAS... 3 LAS TAREAS PROGRAMADAS EN GOTELGEST.NET... 4 A) DAR DE ALTA UN USUARIO...
Guía Notas Parciales. Intermedio
Guía Notas Parciales Intermedio ÍNDICE I. INTRODUCCIÓN 3 II. CREAR LA ESTRUCTURA DE NOTAS PARCIALES (OPCIÓN NOTAS NORMALES) 4 III. CREAR LA ESTRUCTURA DE NOTA FINAL (OPCIÓN NOTAS CALCULAS) 6 IV. INGRESAR
Tema 1. Introducción a JAVA
Tema 1. Introducción a JAVA Historia Características Plataforma Java Entorno de desarrollo Ejemplo: Hola mundo Estructura general de un programa Java 1 Historia de Java (i) Surge en 1991: Sun Microsystems
Módulo 2. Inicio con Java
Módulo 2. Inicio con Java Objetivos: -Clasificar el lenguaje de programación Java según las formas de clasificar los lenguajes de programación. -Describir el funcionamiento de la plataforma Java. -Explicar
Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.
Sensor de Temperatura utilizando el Starter Kit Javelin Stamp Realizado por: Bertha Palomeque A. Rodrigo Barzola J. INTRODUCCION DIFERENCIAS EJEMPLOS JAVA Orientado a Objetos Multiplataforma Programar
SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler
Task Scheduler Se necesita modelar una aplicación que permita definir tareas y ejecutarlas en forma programada. Las tareas pueden ser: La ejecución de programa cualquiera o comando del sistema operativo,
Creación de Funciones de Conducción
Creación de Funciones de Conducción Requerimientos Para el desarrollo de esta actividad se requiere que: Contemos con un robot BoeBot armado con placa Arduino. Repetición En estos momentos habremos notado
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
Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.
Partes de un programa en Java A. Ejemplo de un Programa en Java /* class Ejemplo1 { //comienza la clase Ejemplo1. public static void main(string[] args) { // comienza el método main. JFrame miventana;
Módulo 1 El lenguaje Java
Módulo 1 El lenguaje 1.1 Presentación de es un lenguaje de programación desarrollado por la empresa Sun Microsystems en 1991 como parte de un proyecto secreto de investigación llamado Green Proyect, con
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
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
Sintaxis y Convenciones de Java. M. en C. Erika Vilches
Sintaxis y Convenciones de Java M. en C. Erika Vilches Estructura del Código en Java Hay una clase en un archivo fuente Hay métodos en una clase Hay enunciados en un método Anatomía de una Clase Cuando
Tema 4. Gestión de entrada/salida
Tema 4. Gestión de entrada/salida 1. Principios de la gestión de E/S. 1.Problemática de los dispositivos de E/S. 2.Objetivos generales del software de E/S. 3.Principios hardware de E/S. 1. E/S controlada
2.2.- Paradigmas de la POO
2.2.- Paradigmas de la POO Los principios propios de la orientación a objetos son: 2.2.1.- Abstracción de Datos 2.2.2.- Encapsulamiento 2.2.3.- Ocultamiento 2.2.4.- Herencia 2.2.5.- Polimorfismo Cualquier
Programación Orientada a Objetos con Java
Programación Orientada a Objetos con Java M.C. Jorge Eduardo Ibarra Esquer [email protected] Sobrecarga de métodos Java permite la definición de dos o más métodos que tengan el mismo nombre, dentro de la
Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología
Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología La metodología para el desarrollo de software es un modo sistemático de realizar, gestionar y administrar un proyecto
SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA
SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA E. SÁEZ, M. ORTIZ, F. QUILES, C. MORENO, L. GÓMEZ Área de Arquitectura y Tecnología de Computadores. Departamento de Arquitectura
Programación orientada a objetos
Repaso Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual [email protected]! Clase! Objeto! Atributo o variable de instancia! Método! Instanciar/crear un objeto!
CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa [email protected]
CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa [email protected] En este documento explicaré brevemente cómo construir un servicio web con Java Axis2 y cómo invocarlo desde un cliente
Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. IIC1102 Introducción a la Programación
Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación IIC1102 Introducción a la Programación Tutorial eclipse TM Introducción al uso de eclipse TM Contents
Estructuras de Sistemas Operativos
Estructuras de Sistemas Operativos Definicion de Sistema Operativos Un sistema operativo es un programa que actua como inter entre el usuario y el hardware de un computador y su proposito es proporcionar
CDI Exclusión mutua a nivel alto. conceptos
conceptos El concepto de usar estructuras de datos a nivel alto libera al programador de los detalles de su implementación. El programador puede asumir que las operaciones están implementadas correctamente
Capítulo 5. Cliente-Servidor.
Capítulo 5. Cliente-Servidor. 5.1 Introducción En este capítulo hablaremos acerca de la arquitectura Cliente-Servidor, ya que para nuestra aplicación utilizamos ésta arquitectura al convertir en un servidor
TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.
TABLA DE DECISION La tabla de decisión es una herramienta que sintetiza procesos en los cuales se dan un conjunto de condiciones y un conjunto de acciones a tomar según el valor que toman las condiciones.
Uso de excepciones en Java
Uso de excepciones en Java En Java, cuando se produce un error en un método, se lanza un objeto Throwable. Cualquier método que haya llamado al método puede capturar la excepción y tomar las medidas que
Programación Orientada a Objetos en Java
Programación Orientada a Objetos en Java Curso 2006-2007 Tema 4 Herencia y Polimorfismo Gonzalo Méndez Pozo Dpto. de Ingeniería de Software e Inteligencia Artificial Universidad Complutense de Madrid Herencia
Actividades para mejoras. Actividades donde se evalúa constantemente todo el proceso del proyecto para evitar errores y eficientar los procesos.
Apéndice C. Glosario A Actividades de coordinación entre grupos. Son dinámicas y canales de comunicación cuyo objetivo es facilitar el trabajo entre los distintos equipos del proyecto. Actividades integradas
LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL
OBJETIVO Mejorar el nivel de comprensión y el manejo de las destrezas del estudiante para utilizar formulas en Microsoft Excel 2010. 1) DEFINICIÓN Una fórmula de Excel es un código especial que introducimos
un programa concurrente
Introducción un programa concurrente asumimos que tengamos un programa concurrente que quiere realizar acciones con recursos: si los recursos de los diferentes procesos son diferentes no hay problema,
COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA
COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA Autor: Carlos Javier Martín González. Licenciado en Física Teórica por la Universidad Autónoma de Madrid. Analista programador y funcional. Desarrollador
Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos
Conceptos ELO329: Diseño y Programación Orientados a Objetos 1 Paradigmas de Programación Historia: Los computadores parten cableados por hardware, Luego se introduce la programación en binario, Se desarrolla
2.1. Introducción al lenguaje 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
PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE
PRUEBAS DE SOFTWARE La prueba del software es un elemento crítico para la garantía de la calidad del software. El objetivo de la etapa de pruebas es garantizar la calidad del producto desarrollado. Además,
Las propiedades de la clase en java es el equivalente a las variables globales en lenguajes estructurados como el C.
EJERCICIO GUIADO. JAVA: VARIABLES GLOBALES Variables Globales / Propiedades de la Clase Las propiedades de la clase en java es el equivalente a las variables globales en lenguajes estructurados como el
LiLa Portal Guía para profesores
Library of Labs Lecturer s Guide LiLa Portal Guía para profesores Se espera que los profesores se encarguen de gestionar el aprendizaje de los alumnos, por lo que su objetivo es seleccionar de la lista
Técnicas Avanzadas de Testing Automatizado
Técnicas Avanzadas de Testing Automatizado Introducción: Testing ad hoc Testing sistemático Testing unitario Unidad y Suite de tests Frameworks xunit Fixtures compartidos e independecia Tests parametrizados
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
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
Capítulo 1 Introducción a la Computación
Capítulo 1 Introducción a la Computación 1 MEMORIA PRINCIPAL (RAM) DISPOSITIVOS DE ENTRADA (Teclado, Ratón, etc) C P U DISPOSITIVOS DE SALIDA (Monitor, Impresora, etc.) ALMACENAMIENTO (Memoria Secundaria:
Manual Ingreso Notas y Acta Electrónica
Manual Ingreso Notas y Acta Electrónica ÍNDICE ÍNDICE 2 I. INTRODUCCIÓN 3 II. CREAR LA ESTRUCTURA DE NOTAS PARCIALES (OPCIÓN NOTAS NORMALES) _ 4 III. CREAR LA ESTRUCTURA DE NOTA FINAL (OPCIÓN NOTAS CALCULADAS)
En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.
Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa
Secretos de la Programación Concurrente
Secretos de la Programación Concurrente Stuart Perez, Luis Castro Autómatas y Compiladores, Escuela de Ciencias de la Computación e Informática, San Pedro de Montes de Oca, Costa Rica [email protected]
Presentaciones. Con el estudio de esta Unidad pretendemos alcanzar los siguientes objetivos:
UNIDAD 8 Presentaciones Reunión. (ITE. Banco de imágenes) as presentaciones son documentos formados por una sucesión de páginas, llamadas diapositivas, que transmiten información estructurada de manera
Ecuaciones de primer grado con dos incógnitas
Ecuaciones de primer grado con dos incógnitas Si decimos: "las edades de mis padres suman 120 años", podemos expresar esta frase algebraicamente de la siguiente forma: Entonces, Denominamos x a la edad
SIMM: TEORÍA DE LOS S.O. I.E.S. JUAN DE LA CIERVA CURSO 2007/2008
SIMM: TEORÍA DE LOS S.O. I.E.S. JUAN DE LA CIERVA CURSO 2007/2008 1.- INTRODUCCIÓN A LOS PROCESOS 1.1.- Concepto 1.2.- Composición y estructura 1.3.- Estados y transiciones 2.- COMUNICACIÓN ENTRE PROCESOS
FUNDAMENTOS DE PROGRAMACION CON C#
Capítulo 1 FUNDAMENTOS DE PROGRAMACION CON C# El lenguaje C# C# (léase, en inglés C sharp, y en español C almohadilla) es un lenguaje de programación que permite el desarrollo de aplicaciones para Internet,
CAPITULO V. SIMULACION DEL SISTEMA 5.1 DISEÑO DEL MODELO
CAPITULO V. SIMULACION DEL SISTEMA 5.1 DISEÑO DEL MODELO En base a las variables mencionadas anteriormente se describirán las relaciones que existen entre cada una de ellas, y como se afectan. Dichas variables
Elementos requeridos para crearlos (ejemplo: el compilador)
Generalidades A lo largo del ciclo de vida del proceso de software, los productos de software evolucionan. Desde la concepción del producto y la captura de requisitos inicial hasta la puesta en producción
Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría
Java en 3 horas Ampliación de Sistemas Operativos Rodrigo Santamaría Generalidades Desarrollado por Sun Hereda mucha de la sintaxis de C (1972) Fuertemente tipado y orientado a objetos Aplicaciones compiladas
AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7
Tutoriales de ayuda e información para todos los niveles AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7 Como agregar a una red existente un equipo con Windows 7 y compartir sus archivos
Funcionalidades Software PROYECTOS GotelGest.Net Software para la gestión de Proyectos GotelGest.Net
2012 Funcionalidades Software PROYECTOS GotelGest.Net Software para la gestión de Proyectos GotelGest.Net Servinet Sistemas y Comunicación S.L. www.softwaregestionproyectos.com Última Revisión: Febrero
Guía de uso del Cloud Datacenter de acens
guíasdeuso Guía de uso del Cloud Datacenter de Calle San Rafael, 14 28108 Alcobendas (Madrid) 902 90 10 20 www..com Introducción Un Data Center o centro de datos físico es un espacio utilizado para alojar
Transacciones y bloqueos en SQL-Server
Transacciones y bloqueos en SQL-Server (Información para el uso desde Axapta) Introducción En este documento vamos a intentar explicar cuatro conceptos básicos acerca de las transacciones y los bloqueos
ÍNDICE DISEÑO DE CONTADORES SÍNCRONOS JESÚS PIZARRO PELÁEZ
ELECTRÓNICA DIGITAL DISEÑO DE CONTADORES SÍNCRONOS JESÚS PIZARRO PELÁEZ IES TRINIDAD ARROYO DPTO. DE ELECTRÓNICA ÍNDICE ÍNDICE... 1 1. LIMITACIONES DE LOS CONTADORES ASÍNCRONOS... 2 2. CONTADORES SÍNCRONOS...
