SlideShare una empresa de Scribd logo
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

PDF
Java ArrayList Iterator
PDF
Java HashMap
PDF
Java::Acceso a Bases de Datos
PDF
Programa Java que gestiona los productos que comercializan varios viveros
PDF
Java Applet:::Pelota que rebota en un recinto.
PDF
Ejercicios de programacion concurrente
DOCX
Reporte de grafos con semagforos de 3,3,4 y 6 procesos
PDF
Ejercicios en Netbeans
Java ArrayList Iterator
Java HashMap
Java::Acceso a Bases de Datos
Programa Java que gestiona los productos que comercializan varios viveros
Java Applet:::Pelota que rebota en un recinto.
Ejercicios de programacion concurrente
Reporte de grafos con semagforos de 3,3,4 y 6 procesos
Ejercicios en Netbeans

La actualidad más candente (19)

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

Destacado (20)

PDF
Java AWT Calculadora
PDF
Java Thread Cronometro
PDF
Acceso a BBDD mediante un servlet
PDF
Java AWT Tres en Raya
PDF
jQuery Mobile :: Cuadros de diálogo
PDF
jQuery Mobile :: Enlaces a páginas internas.
PDF
Word VBA
PDF
Servlets que manejan datos de formularios HTML
PDF
Acciones JSP
PDF
Jsp directiva page
PDF
Explicación del código del Servlet HolaMundo
PDF
Find File Servlet DB
PDF
Proyecto JSP
PDF
Elementos de script en JSP
PDF
Servlet Hola Mundo con Eclipse y Tomcat
PDF
Crear Base de Datos en Oracle
PDF
Configurar entorno Android
PDF
App Android MiniBanco
PDF
MIT App Inventor2 Pintar en Imagen
PDF
Práctica Completa en Flash – ActionScript
Java AWT Calculadora
Java Thread Cronometro
Acceso a BBDD mediante un servlet
Java AWT Tres en Raya
jQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Enlaces a páginas internas.
Word VBA
Servlets que manejan datos de formularios HTML
Acciones JSP
Jsp directiva page
Explicación del código del Servlet HolaMundo
Find File Servlet DB
Proyecto JSP
Elementos de script en JSP
Servlet Hola Mundo con Eclipse y Tomcat
Crear Base de Datos en Oracle
Configurar entorno Android
App Android MiniBanco
MIT App Inventor2 Pintar en Imagen
Práctica Completa en Flash – ActionScript
Publicidad

Similar a Sincronizar Threads (20)

DOCX
Entrega de reporte no 1, lab 1
DOCX
Multitarea e hilos en java con ejemplos
PDF
Concurrencia en Java
PDF
Uso de apis en java
DOC
Uso de apis en java
PDF
Informe Final Del Proyecto Poo
 
PDF
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
PPTX
Chap 15bpin
PDF
DefinicionExplicacionEjemplosdeHilosenJava
PPTX
Programación multitarea
DOC
Guia1 programacion de-procesos_concurrentes-hilos
PPTX
Chap 15fpin
PPTX
PDF
Comunicacion Java Envio De Datos Al Puerto Paralelo
PPTX
Unidad 6: Flujos y Archivos Ejercicio 3
PPT
Threads en java
PPT
Hilos
PPT
Threads en Java
PPTX
S6-POO-3.2 Contenedores Especiales
Entrega de reporte no 1, lab 1
Multitarea e hilos en java con ejemplos
Concurrencia en Java
Uso de apis en java
Uso de apis en java
Informe Final Del Proyecto Poo
 
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Chap 15bpin
DefinicionExplicacionEjemplosdeHilosenJava
Programación multitarea
Guia1 programacion de-procesos_concurrentes-hilos
Chap 15fpin
Comunicacion Java Envio De Datos Al Puerto Paralelo
Unidad 6: Flujos y Archivos Ejercicio 3
Threads en java
Hilos
Threads en Java
S6-POO-3.2 Contenedores Especiales

Más de jubacalo (11)

PDF
Cronómetro con MIT App Inventor 2
PDF
Web de noticias en Ajax
PDF
Escenarios
PDF
Matrices02
PDF
Gráficos
PDF
Tabla Dinámica
PDF
Tabla de Datos
PDF
Textura de agua
PDF
Funciones lógicas y condicionales
PDF
Solver
PDF
Java Thread Cronometro
Cronómetro con MIT App Inventor 2
Web de noticias en Ajax
Escenarios
Matrices02
Gráficos
Tabla Dinámica
Tabla de Datos
Textura de agua
Funciones lógicas y condicionales
Solver
Java Thread Cronometro

Último (20)

PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PDF
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
PDF
Híper Mega Repaso Histológico Bloque 3.pdf
DOCX
PLANES DE área ciencias naturales y aplicadas
DOCX
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
PDF
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
PDF
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
PDF
Tomo 1 de biologia gratis ultra plusenmas
PDF
Atencion prenatal. Ginecologia y obsetricia
PDF
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
2.0 Introduccion a processing, y como obtenerlo
PDF
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
PDF
DI, TEA, TDAH.pdf guía se secuencias didacticas
PDF
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
PPTX
Presentación de la Cetoacidosis diabetica.pptx
PPTX
caso clínico iam clinica y semiología l3.pptx
PDF
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
PDF
Teologia-Sistematica-Por-Lewis-Sperry-Chafer_060044.pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
Híper Mega Repaso Histológico Bloque 3.pdf
PLANES DE área ciencias naturales y aplicadas
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
Tomo 1 de biologia gratis ultra plusenmas
Atencion prenatal. Ginecologia y obsetricia
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
2.0 Introduccion a processing, y como obtenerlo
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
DI, TEA, TDAH.pdf guía se secuencias didacticas
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
Presentación de la Cetoacidosis diabetica.pptx
caso clínico iam clinica y semiología l3.pptx
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
Teologia-Sistematica-Por-Lewis-Sperry-Chafer_060044.pdf
Escuelas Desarmando una mirada subjetiva a la educación

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