Download Algoritmos y ProgramaciónIII Temario
Document related concepts
no text concepts found
Transcript
Procesos, hilos, computación distribuida Hilos en Java Tareas programadas Estados incoherentes Exclusión en Java Concurrencia y UML 1 !" # $ % &' ( ) * % ) % % &' ( &) % % + % ' % , * % % -. * &' & */ & // % , 2 % Multiprogramación con procesos Tiempo Compartido con hilos Concurrencia Multiprocesamiento con entornos livianos Computación distribuida 0 con corrutinas &' 1 2 «interface» Runnable +run() Object +wait() +notify() +notufyAll() Thread +start() +isAlive() : boolean +sleep() +yield() +interrupt() +isInterrupted() : boolean +setPriority() +getPriority() * 1 ThreadGroup HiloConcreto +run() : void 3 0 &' 1 2 3 class HiloConcreto extends Thread { public void run() { ... código del hilo ... } ... } ... HiloConcreto unHilo = new HiloConcreto(); unHilo.start(); // start llama a run de manera polimorfa 4 3 new HiloConcreto().start(); 0 &' 1 Clase Thread 2 Método void sleep(int ms) void wait() void wait(int ms) Object Object void notify() Object Pone en marcha un hilo que había sido suspendido con wait(). void notifyAll() Object Pone en marcha todos los hilos que habían sido suspendidos con wait() para ese objeto. void yield() Thread void join() Thread Un hilo deja voluntariamente la ejecución para permitir que se le pase el turno a otro hilo; se seguirá ejecutando cuando le vuelva a tocar su turno. El hilo actual va a quedar detenido hasta que termine el hilo para el cual se llama join. void join(int ms) Thread Significado El hilo va a quedar detenido por lo menos por el intervalo de tiempo especificado, sin ser liberado el bloqueo de sincronización. Se suspende la ejecución del hilo hasta recibir un notify() o notifyAll(). Se suspende la ejecución del hilo hasta recibir un notify() o notifyAll() o hasta que pase el tiempo especificado, lo primero que ocurra. boolean isAlive() Thread El hilo actual va a quedar detenido hasta que termine el hilo para el cual se llama join, o hasta que pase el tiempo especificado, lo primero que ocurra. Determina si el hilo está activo. void interrupt() Thread Pide al hilo que se interrumpa. InterruptedException si estaba en wait/sleep. bolean isInterrupted() Thread Determina si el hilo fue interrumpido. 4 /$ ! " ! # ! $$ % (' % & ' ! ! ) * + " ! # ! $$ + , (+ -. ! ) , -. ' /) ' , -. ) /$ 0 ' , '' ! 0 ' * ' 1 ' 0 2 (' % ! !) -. ! + , -. (3 ! ) 4! ) ! ) 5 % 5 5 6 5 7 3 Timer t = new Timer(true); // es un duende t.scheduleAtFixedRate(new TareaProgramada(),0,1000); … import java.util.TimerTask; public class TareaProgramada extends TimerTask { public void run() { // aquí se define lo que se debe hacer } } 5 Clase Método TimerTask abstract void run() TimerTask boolean cancel() Timer Timer (boolean esDuende) Timer Timer schedule(TimerTask t, Date d) schedule(TimerTask t, long despuesDe) schedule(TimerTask t, Date primeraVez, long cada) Funcionalidad Define la tarea a realizar. Debe redefinirse. Cancela la tarea, de modo que no se vuelva a ejecutar, y devuelve true si esperaba ejecutarla por lo menos una vez en adelante. Constructor. La variante Timer() equivale a Timer(true). En general se lo usa como duende, así que se lo invoca Timer(false). Programa la tarea para que se ejecute una sola vez en el momento indicado. Programa la tarea para que se ejecute una sola vez luego del retardo especificado en milisegundos. Programa la tarea para que se ejecute en forma repetida desde el momento indicado, cada una cantidad de milisegundos. Se interrumpe mediante el método cancel. schedule(TimerTask t, long despuesDe, long cada) scheduleAtFixedRate(TimerTask t, Date primeraVez, long cada) Programa la tarea para que se ejecute en forma repetida luego del retardo indicado, cada una cantidad de milisegundos. Se interrumpe mediante el método cancel. Programa la tarea para que se ejecute en forma repetida desde el momento indicado, cada una cantidad fija de milisegundos. Se interrumpe mediante el método cancel. Timer Timer Timer Timer scheduleAtFixedRate(TimerTask Programa la tarea para que se ejecute en forma repetida luego del retardo indicado, t, long despuesDe, long cada) cada una cantidad fija de milisegundos. Se interrumpe mediante el método cancel. 6 %% )8 % , 1 2 ( " + 9 " $ ( : : % 4$ 12 " " ' $ ! %% % % %< ;' ( ) => 6 46 ? ) ,> 6 46 ? ) * $ $ 3 $ *@ 3 / %3 ! % ' % '@ ! %3 : @ 3 7 / % / ' ( 3 AB AC 4$ 8 % % 1A 2 B ## 6B6 ' 1 ' = ' ?2 4 ' ( " ' 5 ! 6 7 (7 8 " 5 ' &7 /A ! ! 1 2 + 0 @ % $ ? + %% ': @ " ' % % @ 8 /A 1 2 * % $ % $ % % % % + 8 '% @ % * : D 1 %! % : 8 % A 2 $ 8 % class Punto { private int coordX, int coordY; public synchorized int x() { return coordX; } public synchronized int y() { return coordY; } public synchronized void cambiarXY(int x, int y) { coordX = x; coordY = y; } } 9 * : % D : A " % 2 " $ 1 % % for (int i = 0; true; i++) { Object elem = null; synchronized (v) { if (i < v.size()) elem = v.get(i); else break; } System.out.println(elem); } /A ) % % 4$ '% 8 % :% % 3' , &' E E + F ' % % % A % $ * 10 ) % A 1 2 ) % % '% 8 % % :% % " + G % " 8HG % " "8 H I %% ) &' % A 1 2 4 $ (. $ (* $ ! * + ' % * % + ' % )8 % % E %( F A %" % ) 12 A 12 E 11 ) % * A 1 2 !( ) A * ' ' % : % ( / % % % $ . " " * ' 1% % 52 hilo H1 hilo H2 Usando R (bloqueado) Usando Q (bloqueado) Usa Q Usa R Libera R Libera Q 1 2 12 7)+1 2 ) % $ % Retira dinero Entrega dinero Debita cuenta '% % 7)+1 2 ' / % 13 6 + $ % % % % / &' % 44 $ ( ! &' ( A ) 1 * 3 : : % % " % $ 8 % 2 J 8 % 3 % % % & // % % % 4 (" 14 . ( @ E + ( ; &' < /5 ) D 15