¿Ayuda con la sincronizacion de hilos?
Publicado por Francisco Emmanuel (60 intervenciones) el 12/05/2020 21:26:47
Buen día soy nuevo en esto de los hilos y me esta costando trabajo entenderlos estoy realizando un programa donde escribo un nombre con 3 hilos distintos para que los muestre de la siguiente manera 10 veces
1.- Alan Raul
2.- Alan Raul
3.- Alan Raul
....
El hilo1 se encarga de escribir el numero , el hilo2 escribe el nombre de Alan y el hilo 3 escribe el nombre de Raul el problema es que debo crear 2 hilos de hilo2 y 4 hilos de hilo3 y pues que estén sincronizados para los que los hilos de hilo2 escriban Alan y que los 4 hilos de hilo3 escriban Raul pero sin duplicar datos tengo código pero no esta funcionado correctamente me muestra los resultados de manera incorrecta:
1.- Raul Raul Raul Raul Alan Alan Raul Raul Raul
2.- Raul Alan Alan Raul Raul
estoy usando synchronized aunque no se si exista otra alternativa dejo el código que tengo al momento:
1.- Alan Raul
2.- Alan Raul
3.- Alan Raul
....
El hilo1 se encarga de escribir el numero , el hilo2 escribe el nombre de Alan y el hilo 3 escribe el nombre de Raul el problema es que debo crear 2 hilos de hilo2 y 4 hilos de hilo3 y pues que estén sincronizados para los que los hilos de hilo2 escriban Alan y que los 4 hilos de hilo3 escriban Raul pero sin duplicar datos tengo código pero no esta funcionado correctamente me muestra los resultados de manera incorrecta:
1.- Raul Raul Raul Raul Alan Alan Raul Raul Raul
2.- Raul Alan Alan Raul Raul
estoy usando synchronized aunque no se si exista otra alternativa dejo el código que tengo al momento:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
public class Tipo1 extends Thread {
@Override
public void run(){
for(int i=1 ;i <=10; i++){
System.out.print(i+".- ");
try{
Tipo1.sleep(1000);
}catch(InterruptedException e){
System.out.println("Error en la clase tipo1"+e);
}
}
}
}
public class Tipo2 extends Thread {
public synchronized void EscribirNombre() {
for (int i = 1; i <= 10; i++) {
try {
Tipo2.sleep(1000);
} catch (InterruptedException e) {
System.out.println("Error en la clase tipo2" + e);
}
System.out.print("Alan ");
}
}
@Override
public void run() {
EscribirNombre();
}
}
public class Tipo3 extends Thread {
public synchronized void EscSegundoNombre() {
for (int i = 1; i <= 10; i++) {
System.out.print("Raul ");
try {
Tipo3.sleep(1000);
} catch (InterruptedException e) {
System.out.println("Error en la clase tipo4" + e);
}
}
}
@Override
public void run() {
EscSegundoNombre();
}
}
public class Prueba {
public static void main(String[] args) {
Tipo1 tipo1 = new Tipo1();
Tipo2 tipo2 = new Tipo2();
Tipo2 btipo2 = new Tipo2();
Tipo3 tipo3 = new Tipo3();
Tipo3 btipo3 = new Tipo3();
Tipo3 ctipo3 = new Tipo3();
Tipo3 dtipo3 = new Tipo3();
tipo1.start();
tipo2.start();
btipo2.start();
tipo3.start();
btipo3.start();
ctipo3.start();
dtipo3.start();
}
}
Valora esta pregunta


0