Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
%I&'( 2
%I&'( 2
-stados de un thread
%I&'( 2
Pro,ecto
Que comience cada instancia en un n#mero distinto. Que se detenga al llegar a cero.
%I&'( 2
/ava&util&concurrent&-.ecutor
public inter(ace -.ecutor { void e.ecute"Runnable command# $
Provee soporte para el ciclo de vida de la e&ecuci%n' estad(sticas' administraci%n ) monitoreo. Separa la definici%n de las Threads de su mec*nica de e&ecuci%n.
75- ! "istemas O#erativos Pro$. Lic. Ing. Osvaldo Cla 6
%I&'( 2
/ava&util&concurrent& -.ecutor%ervice
$s una Sub Interface de $xecutor con los mtodos para administrar el ciclo de vida.
boolean a+aitTermination"long timeout0 TimeUnit unit# boolean is%hutdo+n"# boolean isTerminated"# void shutdo+n"# 1ist2Runnable3 shutdo+n4o+"#
%I&'( 2
.as tareas se toman de una cola. .as threads se reusan en lugar de crear una nueva cada ve/. $l tama0o del pool puede fi&arse.
ScheduledThreadPool$xecutor
%I&'( 2
static ExecutorService newFixedThreadPool(int nThreads) static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory)
rea un pool con un n#mero fi&o de Threads
%I&'( 2 ! 75- ! "istemas O#erativos Pro$. Lic. Ing. Osvaldo Cla +
-/emplo
%I&'( 2
-/emplo
3Qu pas% con el Shutdo"n4 Repetir para otra cantidad de timers. ambiar a shutdo"n5o"()
75- ! "istemas O#erativos Pro$. Lic. Ing. Osvaldo Cla ,,
%I&'( 2
-/emplo
%I&'( 2
Inter(ace 5allable2*3
* call"# thro+s -.ception
Se la usa cuando se 1uiere 1ue un "or-er thread devuelva un valor (c*lculo asincr%nico).
%I&'( 2
-/emplo
public class Traigo%tring implements 5allable2%tring3 { int duermo = 0 public Traigo%tring"int n# { duermo = n $ public %tring call"# thro+s -.ception { %,stem&out&println";5omien=a el calculo de ;)duermo) ; so, ;)Thread¤tThread"#&getId"## tr, { Thread&sleep"duermo > 1000# $ catch "-.ception e.ception# { $ return "%tring&value'("duermo## $ $
%I&'( 2
,*
-/emplo
public static void main"%tring9: args# { int cantThreads = 8 int cant6utures = ? 6uture2%tring3 result9: = ne+ 6uture 9cant6utures: -.ecutor%ervice e/e = -.ecutors&ne+6i.edThreadPool"cantThreads# (or "int i = 0 i 2 cant6utures i))# { result9i: = e/e&submit"ne+ Traigo%tring"i## $ (or "int i = 1 i 2 10 i))# { impTerminado"result# 77Imprime el resultado de los terminados tr, { Thread&sleep"i > 1000# 77 , lo pone en null $ catch "-.ception e.ception# { $ i( "todas4ull"result## break 77si todos los (uturos terminaron %,stem&out&println";*uelta ;)i# $ %,stem&out&println";6inal;# %,stem&e.it"0# $ $
%I&'( 2
,5
%I&'( 2
,6
Pro,ecto
6. Rehacer el Timer con
a. 9bservador 9bservable. b. :n bot%n de Parcial (;.ap<) . c. :n bot%n de Start=Stop. d.!espus del Stop' el Start vuelve a comen/ar en cero.
%I&'( 2
,7
Pro,ecto
%tart 1ap
1ap ) %top
5ontinue
%I&'( 2
,!