¿Como sincronizar hilos ?
Publicado por Francisco (10 intervenciones) el 13/05/2020 16:01:29
Tengo que hacer un programa con tres hilos los cuales escriben un nombre para que los muestre de la siguiente manera 10 veces:
1.- Oscar Uriel
2.- Oscar Uriel
3.- Oscar Uriel
estoy realizando tres clases llamadas Tipo1, Tipo2, Tipo3 las cuales heredan de Thread, La clase de Tipo1 que es el hilo 1 se encarga de escribir el numero , la clase Tipo2 que es el hilo 2 se encarga de escribir Oscar y la clase Tipo3 que es el hilo 3 escribe Uriel, El problema es que mi profesor me pide que en el main instancie 2 hilos de la clase Tipo2 y 3 hilos de la clase Tipo3 y que los inicie pero al momento de ejecutar el programa como tengo dos Hilos de tipo2 y 3 hilos de Tipo3 me escribe dos veces Oscar y tres veces Uriel de la siguiente manera:
1.- Oscar Oscar Uriel Uriel Uriel
2.- Osca Oscar Uriel Uriel Uriel
.....
El profesor me dijo que tenia que sincronizar los hilos de la clase Tipo2 y Tipo3 pero no tengo idea de como hacerlo yo ya habia sincronizado los hilos y con un hilo de cada clase Tipo funcionaba correctamente pero al momento de agregar los hilos extra de Tipo2 y Tipo3 dejo de funcionar como lo soluciono por favor necesito su ayuda.Dejo el código que tengo al momento:
1.- Oscar Uriel
2.- Oscar Uriel
3.- Oscar Uriel
estoy realizando tres clases llamadas Tipo1, Tipo2, Tipo3 las cuales heredan de Thread, La clase de Tipo1 que es el hilo 1 se encarga de escribir el numero , la clase Tipo2 que es el hilo 2 se encarga de escribir Oscar y la clase Tipo3 que es el hilo 3 escribe Uriel, El problema es que mi profesor me pide que en el main instancie 2 hilos de la clase Tipo2 y 3 hilos de la clase Tipo3 y que los inicie pero al momento de ejecutar el programa como tengo dos Hilos de tipo2 y 3 hilos de Tipo3 me escribe dos veces Oscar y tres veces Uriel de la siguiente manera:
1.- Oscar Oscar Uriel Uriel Uriel
2.- Osca Oscar Uriel Uriel Uriel
.....
El profesor me dijo que tenia que sincronizar los hilos de la clase Tipo2 y Tipo3 pero no tengo idea de como hacerlo yo ya habia sincronizado los hilos y con un hilo de cada clase Tipo funcionaba correctamente pero al momento de agregar los hilos extra de Tipo2 y Tipo3 dejo de funcionar como lo soluciono por favor necesito su ayuda.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package clases;
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);
}
}
}
}
package clases;
public class Tipo2 extends Thread {
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.print("Oscar ");
try {
Tipo2.sleep(1000);
} catch (InterruptedException e) {
System.out.println("Error en la clase tipo2" + e);
}
}
}
}
package clases;
public class Tipo3 extends Thread {
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.println("Uriel ");
try {
Tipo3.sleep(1000);
} catch (InterruptedException e) {
System.out.println("Error en la clase tipo4" + e);
}
}
}
}
package clases;
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();
tipo1.start();
try {
tipo1.sleep(10);
} catch (InterruptedException e) {
System.out.println("Error en el hilo 1" + e);
}
tipo2.start();
try {
tipo2.sleep(10);
} catch (InterruptedException e) {
System.out.println("Error en el hilo 1" + e);
}
btipo2.start();
try {
btipo2.sleep(10);
} catch (InterruptedException e) {
System.out.println("Error en el hilo 1" + e);
}
tipo3.start();
try {
tipo3.sleep(10);
} catch (InterruptedException e) {
System.out.println("Error en el hilo 1" + e);
}
btipo3.start();
try {
btipo3.sleep(10);
} catch (InterruptedException e) {
System.out.println("Error en el hilo 1" + e);
}
ctipo3.start();
try {
ctipo3.sleep(10);
} catch (InterruptedException e) {
System.out.println("Error en el hilo 1" + e);
}
}
}
Valora esta pregunta
0