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