Created
December 5, 2012 11:26
-
-
Save pedrojoya/4214870 to your computer and use it in GitHub Desktop.
J7CC0301-SemaforoBinario
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package es.iessaladillo.pedrojoya.pspro.j7cc0301.tarea; | |
import java.text.SimpleDateFormat; | |
import java.util.Date; | |
import java.util.Random; | |
import java.util.concurrent.Semaphore; | |
import java.util.concurrent.TimeUnit; | |
// Simula la cola de impresión de una impresora. | |
public class Impresora { | |
// Creo un semáforo binario para controlar la impresión en la cola. | |
private final Semaphore semaforo = new Semaphore(1); | |
// Imprime el documento que se le pasa como parámetro. | |
public void imprimir(Object documento){ | |
SimpleDateFormat formateador = new SimpleDateFormat("HH:mm:ss"); | |
try { | |
// Adquiero el semáforo. | |
semaforo.acquire(); | |
// Informo de que se ha iniciado la impresión. | |
System.out.printf("%s -> %s: Impresión iniciada\n", | |
formateador.format(new Date()), | |
Thread.currentThread().getName()); | |
// Simulo que la impresión dura un valor aleatorio de segundos | |
// con valor máximo de 5 segundos. | |
Random aleatorio = new Random(); | |
TimeUnit.SECONDS.sleep(aleatorio.nextInt(5)); | |
} catch (InterruptedException e) { | |
e.printStackTrace(); | |
} finally { | |
// Informo de que la impresión ha finalizado. | |
System.out.printf("%s -> %s: Impresión finalizada\n", | |
formateador.format(new Date()), | |
Thread.currentThread().getName()); | |
// Libero el semáforo. | |
semaforo.release(); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package es.iessaladillo.pedrojoya.pspro.j7cc0301.main; | |
import es.iessaladillo.pedrojoya.pspro.j7cc0301.tarea.Impresora; | |
import es.iessaladillo.pedrojoya.pspro.j7cc0301.tarea.Trabajo; | |
public class Main { | |
public static void main (String args[]){ | |
// Creo una nueva impresora. | |
Impresora impresora = new Impresora(); | |
// Creo e inicio 10 hilos que ejecutan 10 trabajos. | |
Thread hilos[]= new Thread[10]; | |
for (int i = 0; i < 10; i++){ | |
hilos[i] = new Thread(new Trabajo(impresora), "Trabajo " + i); | |
} | |
// Lo hago en dos bucles distintos para que se | |
// lance la ejecución de todos a la vez. | |
for (int i = 0; i < 10; i++){ | |
hilos[i].start(); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package es.iessaladillo.pedrojoya.pspro.j7cc0301.tarea; | |
// Trabajo que envía un documento a la impresora. | |
public class Trabajo implements Runnable { | |
// Propiedades. | |
private Impresora impresora; | |
// Constructor | |
public Trabajo(Impresora impresora){ | |
this.impresora = impresora; | |
} | |
@Override | |
public void run() { | |
impresora.imprimir(new Object()); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment