0% encontró este documento útil (0 votos)
119 vistas2 páginas

Procesos Concurrentes en Java

El documento explica cómo crear procesos (threads) concurrentes en Java y cómo usar monitores para controlar el acceso a recursos compartidos entre procesos. Introduce un ejemplo de dos procesos que se intercalan imprimiendo "hola" y "adiós" y luego explica cómo usar un monitor para asegurar que un proceso no se ejecute hasta que el otro haya terminado, imprimiendo los mensajes de forma ordenada.

Cargado por

JeanCV
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
119 vistas2 páginas

Procesos Concurrentes en Java

El documento explica cómo crear procesos (threads) concurrentes en Java y cómo usar monitores para controlar el acceso a recursos compartidos entre procesos. Introduce un ejemplo de dos procesos que se intercalan imprimiendo "hola" y "adiós" y luego explica cómo usar un monitor para asegurar que un proceso no se ejecute hasta que el otro haya terminado, imprimiendo los mensajes de forma ordenada.

Cargado por

JeanCV
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

30/4/2016

ProgramacinConcurrente:ProcesosenJava

Enesteartculoveremoscmointeractuaunprogramacondosprocesos(threads)independientesquese
[Link]
controlarprocesoscomunes.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

[Link];
[Link];
publicclassMain{
publicsynchronizedstaticvoidmain(String[]args){
Mensajeproceso1=newMensaje("hola",100);
[Link]();
Mensajeproceso2=newMensaje("adis",100);
[Link]();
}
}
classMensajeextendsThread{
privateStringtexto;
privateinttiempo;
publicMensaje(Stringtexto,inttiempo){
[Link]=texto;
[Link]=tiempo;
}
@Override
publicvoidrun(){
for(inti=0;i<10;i++){
try{
[Link](texto+"");
sleep(tiempo);
}catch(InterruptedExceptionex){
[Link]([Link]()).log([Link],null,ex);
}
}
}
}

Nosaparecerporpantallaunacadenadetextodeltipo:holaadisholaadisholaadisholaadishola
adisholaadisholaadisadisholaholaadisholaadis,intercalndosecadavezqueseejecutede
[Link]
cadaprocesoparaobservardistintasejecuciones.

Monitores
Enelcasoanteriorlosdosprocesoseranindependientes,peroqupasasiporejemploquisieramosqueno
seescribiera"adis"siantesnohubieraun"hola"yviceversa?EnesecasohabraquecrearunMonitor.
Unmonitoresunaclaseexternaquesirveparacontrolarprocesosquetienenelementosencomnyen
ciertaformatenerunciertocontrolsobrequprocesosepuedeonoejecutar.
Paraimplementarelejemplopropuestoveamosesteejemplo:
1
2
3
4
5
6

[Link];
[Link];
publicclassMain{
publicstaticvoidmain(Stringargs[]){
Monitormonitor=newMonitor();
Escribirhola=newEscribir("hola",0,monitor);

[Link]

1/2

30/4/2016

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

ProgramacinConcurrente:ProcesosenJava

[Link]();
Escribiradios=newEscribir("adis",1,monitor);
[Link]();
}
}
classEscribirextendsThread{
privateMonitormonitor;
privateStringtexto;
privateintorden;
publicEscribir(Stringtexto,intorden,Monitormonitor){
[Link]=texto;
[Link]=monitor;
[Link]=orden;
}
@Override
publicvoidrun(){
for(inti=0;i<10;i++){
try{
[Link](texto+"",orden);
sleep((int)([Link]()*10));
}catch(InterruptedExceptionex){
[Link]([Link]()).log([Link],null,ex);
}
}
}
}
classMonitor{
privateintactual=0;
publicsynchronizedvoidescribir(Stringtexto,intorden){
while(orden!=actual){
try{
wait();
}catch(InterruptedExceptionex){
[Link]([Link]()).log([Link],null,ex);
}
}
[Link](texto);
actual=(actual+1)%2;
notifyAll();
}
}

[Link]
losdosprocesosmanejandatosencomn,enestecasoMonitor,esimprescindibleusarlapalabra
[Link]
while,[Link]
ejecutarseelprocesocorrespondienteusaremoselmtodonotifyAll()paradespertaratodoslosthreads
queestabanemmodoespera.

[Link]

2/2

También podría gustarte