Java - ¿Como sincronizar hilos ?

 
Vista:
sin imagen de perfil
Val: 14
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

¿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
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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder