SlideShare una empresa de Scribd logo
1 de 3
Práctica CNICE. En esta práctica vamos a poner un ejemplo de sincronización de threads.

Para ello vamos a desarrollar una clase contenedor (una especie de buffer) de una variable de tipo int. Este contenedor se
ha de asegurar en su implementación, que nunca puede haber dos threads escribiendo o borrando dicha variable a la vez.

Además, se ha de asegurar también que ningún thread pueda borrar el contenido de la variable hasta que otro thread haya
escrito, y que ningún thread pueda volver a escribir un valor nuevo hasta que otro thread lo haya borrado.

Escribir dos clases más que implementen al thread que escribe el valor en el contenedor y al thread que borra el valor en el
contenedor.

Por último, escribir una clase con el método main donde se creen y arranquen los dos threads.

Contenedor.java

public class Contenedor {

    private int numero;
    private boolean vacio = true;

    public synchronized void borra(){

        //MIENTRAS SE ESTÁ ESCRIBIENDO
        while(vacio){//ESPERA
               try{
                       wait();//Espera a que se termine el proceso de escritura para BORRAR
               }catch(InterruptedException ex){}
        }

        //CUANDO FINALIZA EL PROCESO DE ESCRITURA BORRA EL BUFFER INFORMA QUE EL BUFFER YA ESTA VACIO

        numero = -1; // -1 es vacío.
        System.out.println("Buffer (Borrado) = [" + numero + "]");
         vacio = true;
         notify();

    }

    public synchronized void escribe(int valor){

        //MIENTRAS SE ESTÁ BORRANDO
         while(!vacio){//ESPERA
                try{
                       wait();//Espera a que termine el proceso de borrado para ESCRIBIR
                }catch(InterruptedException ex){}

        }

        //CUANDO SE VACIA EL BUFER ESCRIBE EL VALOR DEL NUMERO EN EL BUFER INFORMA QUE YA ESTA LLENO

        numero = valor;
        System.out.println("Buffer (escritura) = [" + numero + "]");
        vacio = false;
        notify();

    }//Fin function

}

                                                                                bitCoach::Juan Bautista Cascallar Lorenzo
ThreadBorrar.java

public class ThreadBorrar extends Thread {

       private Contenedor bufer;

       public ThreadBorrar(Contenedor bufer){

               this.bufer = bufer;

       }

       public void run(){

               for(int i=0; i < 10; i++){
                      bufer.borra();

                      try {
                             int t = (int) (Math.random() * 5000);
                             sleep(t);
                      } catch (InterruptedException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                      }

               }

       }

}


ThreadEscribir.java


public class ThreadEscribir extends Thread {

       private Contenedor bufer;

       public ThreadEscribir(Contenedor bufer){

               this.bufer = bufer;

       }

       public void run(){

               for(int i=0; i < 10; i++){
                      int num =(int) (Math.random() * 100);
                      bufer.escribe(num);

                      try {
                             int t = (int) (Math.random() * 5000);
                             sleep(t);
                      } catch (InterruptedException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                      }
               }

           }
}




                                                                     bitCoach::Juan Bautista Cascallar Lorenzo
TestSincroThreads.java

public class TestSincroThreads {

       /**
        * @param args
        */
       public static void main(String[] args) {
              // TODO Auto-generated method stub

              Contenedor bufer = new Contenedor();

              ThreadEscribir hilo_escritor = new ThreadEscribir(bufer);
              ThreadBorrar hilo_borrador = new ThreadBorrar(bufer);

              hilo_escritor.start();
              hilo_borrador.start();

       }
}




                                                                          bitCoach::Juan Bautista Cascallar Lorenzo

Más contenido relacionado

La actualidad más candente

Analisis programacion de pc.
Analisis programacion de pc.Analisis programacion de pc.
Analisis programacion de pc.JOSE2015DANIEL
 
Groovy no es java sin punto y coma v3
Groovy no es java sin punto y coma v3Groovy no es java sin punto y coma v3
Groovy no es java sin punto y coma v3Pablo Alba
 
Ejemplo de movimiento en un applet (Thread::Runnable)
Ejemplo de movimiento en un applet (Thread::Runnable)Ejemplo de movimiento en un applet (Thread::Runnable)
Ejemplo de movimiento en un applet (Thread::Runnable)jubacalo
 
Python3000
Python3000Python3000
Python3000wozgeass
 
Programacion en python_2
Programacion en python_2Programacion en python_2
Programacion en python_2wozgeass
 
Práctica de calculadora documentada
Práctica de calculadora documentadaPráctica de calculadora documentada
Práctica de calculadora documentadaTochis
 
Introducción a Javascript
Introducción a JavascriptIntroducción a Javascript
Introducción a JavascriptAbe Estrada
 
DescripcióN De Codigo Y Interfaz
DescripcióN De Codigo Y InterfazDescripcióN De Codigo Y Interfaz
DescripcióN De Codigo Y Interfazluisfe
 
1.2. kotlin (1)
1.2. kotlin (1)1.2. kotlin (1)
1.2. kotlin (1)xavazque2
 
Quasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en CQuasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en Cdegarden
 
Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)
Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)
Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)José Antonio Sandoval Acosta
 
Ejercicios
EjerciciosEjercicios
EjerciciosEzmee XD
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAVíctor Bolinches
 

La actualidad más candente (19)

5 c iterative
5 c iterative5 c iterative
5 c iterative
 
Prac1
Prac1Prac1
Prac1
 
Analisis programacion de pc.
Analisis programacion de pc.Analisis programacion de pc.
Analisis programacion de pc.
 
Groovy no es java sin punto y coma v3
Groovy no es java sin punto y coma v3Groovy no es java sin punto y coma v3
Groovy no es java sin punto y coma v3
 
Ejemplo de movimiento en un applet (Thread::Runnable)
Ejemplo de movimiento en un applet (Thread::Runnable)Ejemplo de movimiento en un applet (Thread::Runnable)
Ejemplo de movimiento en un applet (Thread::Runnable)
 
Python3000
Python3000Python3000
Python3000
 
P1
P1P1
P1
 
Reporte viernes 24
Reporte viernes 24Reporte viernes 24
Reporte viernes 24
 
Programacion en python_2
Programacion en python_2Programacion en python_2
Programacion en python_2
 
Práctica de calculadora documentada
Práctica de calculadora documentadaPráctica de calculadora documentada
Práctica de calculadora documentada
 
Introducción a Javascript
Introducción a JavascriptIntroducción a Javascript
Introducción a Javascript
 
DescripcióN De Codigo Y Interfaz
DescripcióN De Codigo Y InterfazDescripcióN De Codigo Y Interfaz
DescripcióN De Codigo Y Interfaz
 
Practicas programacion 1 10
Practicas programacion 1 10Practicas programacion 1 10
Practicas programacion 1 10
 
1.2. kotlin (1)
1.2. kotlin (1)1.2. kotlin (1)
1.2. kotlin (1)
 
Quasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en CQuasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en C
 
Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)
Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)
Algorimos básicos para cifrar y descifrar en C# (encriptar y desencriptar)
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
 
Semana 4 Javascript funciones y Metodos
Semana 4   Javascript funciones y MetodosSemana 4   Javascript funciones y Metodos
Semana 4 Javascript funciones y Metodos
 

Destacado

Java AWT Calculadora
Java AWT CalculadoraJava AWT Calculadora
Java AWT Calculadorajubacalo
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometrojubacalo
 
Acceso a BBDD mediante un servlet
Acceso a BBDD mediante un servletAcceso a BBDD mediante un servlet
Acceso a BBDD mediante un servletjubacalo
 
Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Rayajubacalo
 
jQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Cuadros de diálogojQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Cuadros de diálogojubacalo
 
jQuery Mobile :: Enlaces a páginas internas.
jQuery Mobile :: Enlaces a páginas internas.jQuery Mobile :: Enlaces a páginas internas.
jQuery Mobile :: Enlaces a páginas internas.jubacalo
 
Servlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLServlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLjubacalo
 
Acciones JSP
Acciones JSPAcciones JSP
Acciones JSPjubacalo
 
Jsp directiva page
Jsp directiva pageJsp directiva page
Jsp directiva pagejubacalo
 
Explicación del código del Servlet HolaMundo
Explicación del código del Servlet HolaMundoExplicación del código del Servlet HolaMundo
Explicación del código del Servlet HolaMundojubacalo
 
Find File Servlet DB
Find File Servlet DBFind File Servlet DB
Find File Servlet DBjubacalo
 
Proyecto JSP
Proyecto JSPProyecto JSP
Proyecto JSPjubacalo
 
Elementos de script en JSP
Elementos de script en JSPElementos de script en JSP
Elementos de script en JSPjubacalo
 
Servlet Hola Mundo con Eclipse y Tomcat
Servlet Hola Mundo con Eclipse y TomcatServlet Hola Mundo con Eclipse y Tomcat
Servlet Hola Mundo con Eclipse y Tomcatjubacalo
 
Crear Base de Datos en Oracle
Crear Base de Datos en OracleCrear Base de Datos en Oracle
Crear Base de Datos en Oraclejubacalo
 
Configurar entorno Android
Configurar entorno AndroidConfigurar entorno Android
Configurar entorno Androidjubacalo
 
App Android MiniBanco
App Android MiniBancoApp Android MiniBanco
App Android MiniBancojubacalo
 
MIT App Inventor2 Pintar en Imagen
MIT App Inventor2 Pintar en ImagenMIT App Inventor2 Pintar en Imagen
MIT App Inventor2 Pintar en Imagenjubacalo
 
Práctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptPráctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptjubacalo
 

Destacado (20)

Java AWT Calculadora
Java AWT CalculadoraJava AWT Calculadora
Java AWT Calculadora
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometro
 
Acceso a BBDD mediante un servlet
Acceso a BBDD mediante un servletAcceso a BBDD mediante un servlet
Acceso a BBDD mediante un servlet
 
Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Raya
 
jQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Cuadros de diálogojQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Cuadros de diálogo
 
jQuery Mobile :: Enlaces a páginas internas.
jQuery Mobile :: Enlaces a páginas internas.jQuery Mobile :: Enlaces a páginas internas.
jQuery Mobile :: Enlaces a páginas internas.
 
Word VBA
Word VBAWord VBA
Word VBA
 
Servlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLServlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTML
 
Acciones JSP
Acciones JSPAcciones JSP
Acciones JSP
 
Jsp directiva page
Jsp directiva pageJsp directiva page
Jsp directiva page
 
Explicación del código del Servlet HolaMundo
Explicación del código del Servlet HolaMundoExplicación del código del Servlet HolaMundo
Explicación del código del Servlet HolaMundo
 
Find File Servlet DB
Find File Servlet DBFind File Servlet DB
Find File Servlet DB
 
Proyecto JSP
Proyecto JSPProyecto JSP
Proyecto JSP
 
Elementos de script en JSP
Elementos de script en JSPElementos de script en JSP
Elementos de script en JSP
 
Servlet Hola Mundo con Eclipse y Tomcat
Servlet Hola Mundo con Eclipse y TomcatServlet Hola Mundo con Eclipse y Tomcat
Servlet Hola Mundo con Eclipse y Tomcat
 
Crear Base de Datos en Oracle
Crear Base de Datos en OracleCrear Base de Datos en Oracle
Crear Base de Datos en Oracle
 
Configurar entorno Android
Configurar entorno AndroidConfigurar entorno Android
Configurar entorno Android
 
App Android MiniBanco
App Android MiniBancoApp Android MiniBanco
App Android MiniBanco
 
MIT App Inventor2 Pintar en Imagen
MIT App Inventor2 Pintar en ImagenMIT App Inventor2 Pintar en Imagen
MIT App Inventor2 Pintar en Imagen
 
Práctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptPráctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScript
 

Similar a Sincronizar Threads

Similar a Sincronizar Threads (20)

Apache Storm: Desarrollo
Apache Storm: DesarrolloApache Storm: Desarrollo
Apache Storm: Desarrollo
 
El apuntador this
El apuntador this El apuntador this
El apuntador this
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepciones
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
Mule Librerias en Java
Mule Librerias en JavaMule Librerias en Java
Mule Librerias en Java
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
 
Capítulo 7 sincronización de procesos 09 01-2012
Capítulo 7 sincronización de procesos 09 01-2012Capítulo 7 sincronización de procesos 09 01-2012
Capítulo 7 sincronización de procesos 09 01-2012
 
Programando en java
Programando en javaProgramando en java
Programando en java
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Try catch
Try catchTry catch
Try catch
 
Java exceptions
Java exceptionsJava exceptions
Java exceptions
 
Java exceptions
Java exceptionsJava exceptions
Java exceptions
 
excepciones en java
excepciones en javaexcepciones en java
excepciones en java
 
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
 
Introduccion lenguaje java
Introduccion lenguaje javaIntroduccion lenguaje java
Introduccion lenguaje java
 
Chap 15bpin
Chap 15bpinChap 15bpin
Chap 15bpin
 
Cplus
CplusCplus
Cplus
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 

Más de jubacalo

Cronómetro con MIT App Inventor 2
Cronómetro con MIT App Inventor 2Cronómetro con MIT App Inventor 2
Cronómetro con MIT App Inventor 2jubacalo
 
Web de noticias en Ajax
Web de noticias en AjaxWeb de noticias en Ajax
Web de noticias en Ajaxjubacalo
 
Escenarios
EscenariosEscenarios
Escenariosjubacalo
 
Matrices02
Matrices02Matrices02
Matrices02jubacalo
 
Tabla Dinámica
Tabla DinámicaTabla Dinámica
Tabla Dinámicajubacalo
 
Tabla de Datos
Tabla de DatosTabla de Datos
Tabla de Datosjubacalo
 
Textura de agua
Textura de aguaTextura de agua
Textura de aguajubacalo
 
Funciones lógicas y condicionales
Funciones lógicas y condicionalesFunciones lógicas y condicionales
Funciones lógicas y condicionalesjubacalo
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometrojubacalo
 

Más de jubacalo (11)

Cronómetro con MIT App Inventor 2
Cronómetro con MIT App Inventor 2Cronómetro con MIT App Inventor 2
Cronómetro con MIT App Inventor 2
 
Web de noticias en Ajax
Web de noticias en AjaxWeb de noticias en Ajax
Web de noticias en Ajax
 
Escenarios
EscenariosEscenarios
Escenarios
 
Matrices02
Matrices02Matrices02
Matrices02
 
Gráficos
GráficosGráficos
Gráficos
 
Tabla Dinámica
Tabla DinámicaTabla Dinámica
Tabla Dinámica
 
Tabla de Datos
Tabla de DatosTabla de Datos
Tabla de Datos
 
Textura de agua
Textura de aguaTextura de agua
Textura de agua
 
Funciones lógicas y condicionales
Funciones lógicas y condicionalesFunciones lógicas y condicionales
Funciones lógicas y condicionales
 
Solver
SolverSolver
Solver
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometro
 

Último

6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docxCeciliaGuerreroGonza1
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFlor Idalia Espinoza Ortega
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteJuan Hernandez
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docxAleParedes11
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 

Último (20)

6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
6° SEM30 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
Razonamiento Matemático 1. Deta del año 2020
Razonamiento Matemático 1. Deta del año 2020Razonamiento Matemático 1. Deta del año 2020
Razonamiento Matemático 1. Deta del año 2020
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamica
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parte
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docxGLOSAS  Y PALABRAS ACTO 2 DE ABRIL 2024.docx
GLOSAS Y PALABRAS ACTO 2 DE ABRIL 2024.docx
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 

Sincronizar Threads

  • 1. Práctica CNICE. En esta práctica vamos a poner un ejemplo de sincronización de threads. Para ello vamos a desarrollar una clase contenedor (una especie de buffer) de una variable de tipo int. Este contenedor se ha de asegurar en su implementación, que nunca puede haber dos threads escribiendo o borrando dicha variable a la vez. Además, se ha de asegurar también que ningún thread pueda borrar el contenido de la variable hasta que otro thread haya escrito, y que ningún thread pueda volver a escribir un valor nuevo hasta que otro thread lo haya borrado. Escribir dos clases más que implementen al thread que escribe el valor en el contenedor y al thread que borra el valor en el contenedor. Por último, escribir una clase con el método main donde se creen y arranquen los dos threads. Contenedor.java public class Contenedor { private int numero; private boolean vacio = true; public synchronized void borra(){ //MIENTRAS SE ESTÁ ESCRIBIENDO while(vacio){//ESPERA try{ wait();//Espera a que se termine el proceso de escritura para BORRAR }catch(InterruptedException ex){} } //CUANDO FINALIZA EL PROCESO DE ESCRITURA BORRA EL BUFFER INFORMA QUE EL BUFFER YA ESTA VACIO numero = -1; // -1 es vacío. System.out.println("Buffer (Borrado) = [" + numero + "]"); vacio = true; notify(); } public synchronized void escribe(int valor){ //MIENTRAS SE ESTÁ BORRANDO while(!vacio){//ESPERA try{ wait();//Espera a que termine el proceso de borrado para ESCRIBIR }catch(InterruptedException ex){} } //CUANDO SE VACIA EL BUFER ESCRIBE EL VALOR DEL NUMERO EN EL BUFER INFORMA QUE YA ESTA LLENO numero = valor; System.out.println("Buffer (escritura) = [" + numero + "]"); vacio = false; notify(); }//Fin function } bitCoach::Juan Bautista Cascallar Lorenzo
  • 2. ThreadBorrar.java public class ThreadBorrar extends Thread { private Contenedor bufer; public ThreadBorrar(Contenedor bufer){ this.bufer = bufer; } public void run(){ for(int i=0; i < 10; i++){ bufer.borra(); try { int t = (int) (Math.random() * 5000); sleep(t); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } ThreadEscribir.java public class ThreadEscribir extends Thread { private Contenedor bufer; public ThreadEscribir(Contenedor bufer){ this.bufer = bufer; } public void run(){ for(int i=0; i < 10; i++){ int num =(int) (Math.random() * 100); bufer.escribe(num); try { int t = (int) (Math.random() * 5000); sleep(t); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } bitCoach::Juan Bautista Cascallar Lorenzo
  • 3. TestSincroThreads.java public class TestSincroThreads { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Contenedor bufer = new Contenedor(); ThreadEscribir hilo_escritor = new ThreadEscribir(bufer); ThreadBorrar hilo_borrador = new ThreadBorrar(bufer); hilo_escritor.start(); hilo_borrador.start(); } } bitCoach::Juan Bautista Cascallar Lorenzo