gentoo linux, java, software libre y otras hierbas
Dic, 28 2007 - 10:20 am

Las inocentadas

Esta bien que sea el día de los inocentes… pero esto sino lo cree nadie:

Feliz día de los inocentes!

4 Comentarios | deja el tuyo

Dic, 27 2007 - 10:30 am

[código] Problema Productor-Consumidor: sincronización de Hilos en Java (3)

El siguiente ejemplo demuestra simultaneamente el problema del Productor-Consumidor, con y sin sincronismo. No es más que otro programa de referencia, y este no lo voy a explicar mucho ya que en las anteriores entradas (productor-consumidor sin sincronismoproductor-consumidor con sincronismo) ya lo he hecho.

Descarcar proyecto (lo hice con Eclipse)

Un saludo!
Espero que les sea de ayuda!

5 Comentarios | deja el tuyo

Dic, 27 2007 - 10:13 am

[código] Problema Productor-Consumidor: sincronización de Hilos en Java (2)

Continuando en el tema de los hilos … En el siguiente ejemplo veremos el uso e implementación de la sincronización de hilos en Java. De nuevo vamos a tratar el ejemplo del Productor-Consumidor (antes lo hicimos sin sincronización), esta vez con los subprocesos sincronizados (es recomendable que te hayas leido la anterior entrada).

La clase Bufer es la misma de la del ejemplo anterior:

// La interfaz Bufer especifica los métodos llamados por el Productor y el Consumidor.
public interface Bufer {
   public void establecer( int valor );  // colocar valor en Bufer
   public int obtener();              // devolver valor de Bufer
}


Como segunda medida crearemos la clase BuferSincronizado.java, que implementa la clase Bufer.java, y en la cual se declaran los métodos estableces(int) y obtener() con el prefijo synchronized.

Lo que se hace en estos casos es poner algo así como un semáforo. Para ello usamos una variable llamada cuentaBuferOcupado, que tomará dos posibles valores: 1 si el buffer está ocupado, y 0 si el buffer está vacio.

Fijemonos entonces en el método establecer, en donde hay un ciclo que se repite siempre y cuando el bufer esté lleno (while(cuentaBuferOcupado ==1)). Si esta cnodición se cumple, se muestra un mensaje y se invoca al método wait(), para poner al subproceso en espera.

De lo contrario, es decir, cuando el bufer está vacio, se escribe un dato en el bufer y se actualiza la variable cuentaBuferOcupado (indicando que el bufer está ahora ocupado). Posteriormente se usa el método notify(), el cual avisa a los subprocesos que están en espera que pase al estado “listo”.

De igual forma, el método obtener(), usa la variable cuentaBuferOcupado para determinar cuando Leer el resto de la entrada…

9 Comentarios | deja el tuyo

« Entradas anteriores