Sie sind auf Seite 1von 12

Progromocion Orienfodo o Objefos. A.O.P.

I
HILOS
Concepfo de hiIo
HiIo (o con!c!o cc c_ccuc/on o ptoccso //gcto) es un fIugo de
controI secuenciuI denfro de un progrumu.
Es decir codo hiIo fiene
Un comien;o
Uno secuencio de ejecucion
Un finoI
En codo insfonfe concrefo soIo hoy un nico punfo de ejecucion.
En Ios progromos visfos hosfo ohoro eI progromodor soIo ho
especificodo de formo expIcifo un nico fIujo secuencioI de
confroI deI progromo.
Los hiIos sin emborgo no son progrumus porque no pueden ser
ejecufodos por eIIos mismos soIo es posibIe hocerIo denfro de un
progromo oIguno de cuyos foreos s es reoIi;odo por un hiIo.
Esfe femo se dedico o expIicor como se puede ejecufor
simuIfoneomenfe o "en poroIeIo" mos de un fIujo de confroI
secuencioI o hiIo.
Progromocion Orienfodo o Objefos. A.O.P. Z
HILOS
Definicion de hiIo
Por Io fonfo un hiIo es
Un fIujo de confroI secuencioI simpIe denfro de un progromo
Progromocion Orienfodo o Objefos. A.O.P. 3
HILOS
SeneroIidodes respecfo hiIos
Lo progromocion con hiIos puede resuIfor forrogoso.
Desde Jovo I.3 se dispone de Ios cIuses
Timer poro pIunificur Iu egecucin de diferentes tureus
(TimerTask) en un momenfo deferminodo.
TimerTask tureus que pueden pIonificorse
Y excepfo que seo necesorio uno gesfion de hiIos mos sofisficodo
es recomendobIe ufiIi;orIos.
Se dejo oI oIumno Io fomiIiori;ocion con esfos cIoses medionfe Io
oyudo deI sisfemo
EI objefo de esfe femo es Io gesfion de hiIos sin eI uso de esfos
cIoses ouxiIiores.
Lo distincin enfre proceso y proceso Iigero (hiIo) consisfe en
que Ios primeros sueIen fener (copiu) Ios mismos recursos que un
progrumu compIeto sin emborgo Ios Ifimos compurten gron
porfe de Ios recursos deI proceso que ejecufo eI progromo oI que
perfenecen.
Progromocion Orienfodo o Objefos. A.O.P. 4
HILOS
Infroduccion oI frobojo con hiIos
Lo cIose Thread de jovo proporciono oI progromodor Io gestin de
hiIos.
EI mfodo run es en eI que se codifico Io que tiene que egecutur eI
hiIo puede confener cuuIquier instruccin Juvu.
En Jovo se puede creur un hiIo "insfonciondo" (new) cIoses
creodos de Ios dos siguienfes munerus
ImpIementundo eI interfuz Runnable (mfodo run)
Heredundo de Io cIuse Thread y sobreescribiendo eI mfodo run
Progromocion Orienfodo o Objefos. A.O.P. b
HILOS
Heredor de Thread
En esfe coso se fiene que dor Ios siguienfes pusos
Creor uno cIuse (Io IIomoremos ClaseThread) que herede de Thread y
que sobrescribu eI mfodo run con eI codigo que se deseo ejecufor
denfro deI hiIo
Se necesiforo un obgeto de estu cIuse (Io IIomoremos nuevo_thread)
Poro comenzur Io egecucin deI hiIo es suficienfe egecutur eI mtodo
start de nuevo_thread.
Esfo opcion puede resuIfor probIemticu cuondo esfomos
inferesodos en que Iu cIuse que fendro que definir eI hiIo fiene
que heredur de otru cIuse
Progromocion Orienfodo o Objefos. A.O.P. o
HILOS
"ImpIemenfor" Runnable
En esfe coso se fiene que dor Ios siguienfes pusos
Creor uno cIuse (Io IIomoremos ClaseRunnable) que "impIemente" eI
interfuz Runnable (por fonfo codificur eI mfodo run)
Se necesiforo un obgeto de esfo cIuse (Io IIomoremos nuevo_runnable)
Creur un obgeto (Io IIomoremos nuevo_thread)de Io cIuse Thread (con
cuoIquiero de Ios constructores que udmite como urgumento un
obgeto de uno cIose que impIemente eI interfuz Runnable)
proporcionondo nuevo_runnable en su orgumenfo Runnable.
Poro comenzur Io egecucin deI hiIo es suficienfe egecutur eI mfodo
start de nuevo_thread.
Esfo opcion es Io udecuudu cuondo esfomos interesudos en que Io
cIuse que fendro que definir eI hiIo tiene que heredur de otru
cIose
Progromocion Orienfodo o Objefos. A.O.P. 7
HILOS
EjempIo (I)
EgempIo 1: bsquedu IineuI bidireccionuI
A confinuocion se mosfroro un ejempIo de uso de hiIos.
Se frofo de proporcionor un uIgoritmo de bsquedu de un duto en
un urruy de dofos desordenudos.
Poro eIIo se creur dos hiIos que reoIi;oron bsquedu secuenciuI
Uno de eIIos reoIi;oro Io bsquedu IineoI desde eI comienzo deI orroy en
Io primeru mitud deI mismo.
EI otro Io reoIi;oro desde eI finuI deI orroy en Io segundu mitud deI
orroy.
Se creoro uno cIose HiloBuscadorDesdePrincipio que heredu de Io
cIose Thread y ofro cIose HiloBuscadorDesdeFinal que impIementu eI
inferfo; Runnable.
Ambos cIoses fienen Io mismo esfrucfuro y mfodos
Uno copiu propiu deI urruy de dofos donde se busco
EI duto buscodo.
EI nmero de operociones reoIi;odos
Un indicodor Igico sobre si se fermino Io bsquedo con ito
Constructores.
EI mfodo run poro ejecufor Io bsquedo IineoI correspondienfe.
Progromocion Orienfodo o Objefos. A.O.P. 8
HILOS
EjempIo (II)
EgempIo 1: {cont,}
import java.io.*;
class HiloBuscadorDesdePrincipio extends Thread {
public int []datos;
public int dato_buscado;
public int num_operaciones = 0;
public boolean finalizo_con_exito = false;
public HiloBuscadorDesdePrincipio (){}
public HiloBuscadorDesdePrincipio(int dato, int[]datos){ dato_buscado = dato; this.datos = datos;}
public void run(){ int i;
System.out.println("SE BUSCARA ENTRE 0 Y "+ Math.floor(datos.length/2.0) );
for (i = 0; i < Math.floor(datos.length/2.0); i++) {
for (int j = 0; j<100; j++) System.out.print("P");
num_operaciones++;
System.out.print("[P"+num_operaciones+"]");
if (dato_buscado == datos[i] ) {
System.out.println("");
System.out.println("==> PRINCIPIO:"+dato_buscado+" ENCONTRADO EN "+i);
finalizo_con_exito = true;
return;}}
if (i == Math.floor(datos.length/2.0)) System.out.println("==> PRINCIPIO: FALLO ");}}
Se ufiIi;o enfrodo / soIido
Consfrucfores
Afribufos deI hiIo
Creocion deI nuevo hiIo heredero de Threod
Mfodo run
Poro permifir "infercombio de hiIos"
Progromocion Orienfodo o Objefos. A.O.P. 9
HILOS
EjempIo (III)
EgempIo 1: {cont,}
class HiloBuscadorDesdeFinal implements Runnable{
public int []datos;
public int dato_buscado;
public int num_operaciones = 0;
public boolean finalizo_con_exito = false;
public HiloBuscadorDesdeFinal (){}
public HiloBuscadorDesdeFinal(int dato, int[]datos){dato_buscado = dato; this.datos = datos; }
public void run(){ int i;
System.out.println("SE BUSCARA ENTRE "+(datos.length-1)+" Y "+ Math.ceil(datos.length/2.0) );
for ( i = datos.length-1; i > Math.ceil(datos.length/2.0); i--){
for (int j = 0; j<100; j++) System.out.print("F");
num_operaciones++;
System.out.print("[F"+num_operaciones+"]");
if (dato_buscado == datos[i] ){
System.out.println("");
System.out.println("==>FINAL:"+dato_buscado+" ENCONTRADO EN "+i);
finalizo_con_exito = true;
return;}}
if (i == Math.ceil(datos.length/2.0))
System.out.println("==> FINAL FALL"); }}
Consfrucfores
Afribufos deI hiIo
Creocion deI nuevo hiIo impIemenfondo
PunnobIe
Mfodo run
Poro permifir "infercombio de hiIos"
Progromocion Orienfodo o Objefos. A.O.P. I0
HILOS
EjempIo (IV)
EgempIo 1: {cont,}
public class BusquedaLinealBidimensional
{
public static void main (String [] args) throws IOException
{
int [] array_datos = { 12,7,3,11,9,0,13,5,7,10,2,1,6,4,8};
int [] array_datos_principio = { 12,7,3,11,9,0,13,5,7,10,2,1,6,4,8};
int [] array_datos_final = { 12,7,3,11,9,0,13,5,7,10,2,1,6,4,8};
HiloBuscadorDesdePrincipio buscador1 = new HiloBuscadorDesdePrincipio(3, array_datos_principio);
HiloBuscadorDesdeFinal run_buscador2 = new HiloBuscadorDesdeFinal(3, array_datos_final );
Thread buscador2 = new Thread(run_buscador2);
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String str_opcion;
System.out.println("ESCRIBA EL NUMERO QUE DESEA
BUSCAR ENTRE EL 0 Y EL 13");
str_opcion = br.readLine();
opcion = new Integer(str_opcion).intValue();
CIose principoI
Arroys de dofos poro
buscor
Creocion de Ios hiIos
Lecfuro deI nmero que se deseo
buscor
Progromocion Orienfodo o Objefos. A.O.P. II
HILOS
EjempIo (V)
EgempIo 1: {cont,}
while ( opcion != -1 ) {
System.out.println("SE BUSCARA EL NUMERO "+opcion);
buscador1.dato_buscado = opcion;
run_buscador2.dato_buscado = opcion;
buscador2 = new Thread(run_buscador2);
buscador1 = new HiloBuscadorDesdePrincipio
(opcion, array_datos_principio);
buscador2.start();
buscador1.start();
while ( buscador2.isAlive() || buscador1.isAlive() ) ;
System.out.println("LA BSQUEDA HA TERMINADO");
System.out.println("ESCRIBA EL NUMERO QUE DESEA BUSCAR ENTRE EL 0 Y EL 13");
str_opcion = br.readLine();
opcion = new Integer(str_opcion).intValue();
}
}}
Creocion y "orronque" de Ios dos hiIos
(es necesorio creor nuevos hiIos yo que
en codo iferocion se "mueren" Ios hiIos
y no se pueden voIver o orroncor sin
creorIos de nuevo.
Se espero o que Ios dos hiIos "mueron"
Se Iee eI nuevo dofo que se deseo buscor
Progromocion Orienfodo o Objefos. A.O.P. IZ
HILOS
EjempIo (VI)
ConcIusiones deI egempIo 1: bsquedo IineoI bidireccionoI
Se ho mosfrodo vorios ospecfos de Io gesfion de hiIos
Como se proporciono un mfodo run o un hiIo heredundo de Thread
Como se proporciono un mfodo run o un hiIo impIementundo Runnable
Como se "urruncu" un hiIo (start)
Como se sobe si un hiIo est "vivo" (isAlive)
Como "forzur" eI "intercumbio de hiIos"
Mecesidod de creur de nuevo un hiIo puru "reurruncurIo" si "ho muerfo"
Son evidenfes Ios siguienfes curencius de esfe modeIo
DificuIfod poro "sincronizur" fodos Ios hiIos
- Mo sobemos cmo indicur uI buscudor que no puede encontrur eI duto que
dege de buscor cuondo eI ofro fermino con xifo.
- DificuIfod poro "compurtir informucin de monero concurrenfe" podemos
conocer cuonfos operociones ho reoIi;odo codo buscodor pero no sobemos
como occeder de formo concurrenfe o informocion comn se podro
ocfuoIi;or concurrenfemenfe uno voriobIe comn poro eI nmero de
operociones7
A Io Iorgo de esfe femo pIonfeoremos soIuciones o esfos probIemos
Sincroni;ocion de hiIos.
Secciones crficos comporficion de recursos

Das könnte Ihnen auch gefallen