Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package punto1;
- import java.util.Random;
- import java.util.concurrent.Semaphore;
- public class Biblioteca {
- ///PRINCIPAL
- public static void main(String[] args) {
- Semaphore biblioteca= new Semaphore(2);
- Semaphore B1= new Semaphore(1);
- Semaphore B2= new Semaphore(1);
- Random p=new Random();
- Random r=new Random();
- int tiempoL;
- for(int i=1;i<=10;i++) {
- try {
- biblioteca.acquire();//// Representa las dos entradas de la biblioteca, en la simulacion, una sola persona puede entrar por una sola puerta(cualquiera de las dos).
- if(B1.availablePermits()==1) {
- B1.acquire();
- Thread hiloP=new Thread(new Socio(i,100+i,tipoPersona(p.nextInt(2)),B1,biblioteca,"B1"));
- hiloP.start();
- }else {
- if(B2.availablePermits()==1){
- B2.acquire();
- Thread hiloP=new Thread(new Socio(i,100+i,tipoPersona(p.nextInt(2)),B2,biblioteca,"B2"));
- hiloP.start();
- }
- }
- tiempoL=r.nextInt(5001-2000)+2000;
- Thread.sleep(tiempoL);
- }
- catch (InterruptedException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- }
- }
- public static String tipoPersona(int tipo){
- int tipoP=tipo;
- String persona="";
- switch(tipoP) {
- case 0: persona="Profesor";
- break;
- case 1: persona="Alumno";
- break;
- }
- return persona;
- }
- }
- //CLASE SOCIO(esta mal nombrada xd)
- package punto1;
- import java.util.Random;
- import java.util.concurrent.*;
- public class Socio implements Runnable {
- private int numeroSocio,cantLibros,comprobante;
- private String tipoS,nombreB;
- private final Semaphore bibliotecario;
- private final Semaphore biblioteca;
- private int contadorComprobante=0;
- private Libro L1= new Libro("L1","Libro1","Fisica");
- private Libro L2= new Libro("L2","Libro2","Quimica");
- private Libro L3= new Libro("L3","Libro3","Algebra");
- private Libro[]libros={L1,L2,L3};
- public Socio(int comprobante,int numeroSocio,String tipoS,Semaphore bibliotecario,Semaphore biblioteca,String nombreB) {
- this.comprobante=comprobante;
- this.numeroSocio=numeroSocio;
- this.tipoS=tipoS;
- this.bibliotecario=bibliotecario;
- this.biblioteca=biblioteca;
- this.nombreB=nombreB;
- }
- @Override
- public void run() {
- Random aleat= new Random();
- cantLibros=aleat.nextInt(3)+1;
- try {
- System.out.println("Ingresando "+getTipoS()+" Nro. de socio "+getNumeroSocio());
- Thread.sleep(tiempoSleep(getTipoS()));
- System.out.println(" ");
- System.out.println("Nro. de comprobante: "+comprobante);
- System.out.println("Nro. de socio: "+getNumeroSocio());
- System.out.println("Tipo de socio: "+getTipoS());
- System.out.println("Cantidad de dias de prestamo: "+tiempoPrestamo(getTipoS())+" dias.");
- System.out.println("Cantidad de libros: "+cantLibros);
- System.out.println("Fue atendido por: "+nombreB);
- System.out.println("-----------DETALLE-------------");
- prestamoLibroDetalle(cantLibros,libros);
- System.out.println("------------------------");
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally {
- System.out.println("El socio "+numeroSocio+" de tipo "+tipoS+" se va");
- biblioteca.release();
- bibliotecario.release();
- }
- }
- public int tiempoSleep(String tipoS) {
- String tipoSocio=tipoS;
- int tiempo = 0;
- switch (tipoSocio) {
- case "Profesor": Random p= new Random();
- tiempo=p.nextInt(5001-3000)+3000;
- break;
- case "Alumno": Random a= new Random();
- tiempo=a.nextInt(5001-3000)+3000;
- break;
- }
- return tiempo;
- }
- public int tiempoPrestamo(String tipoS) {
- String tipoSocio=tipoS;
- int tiempo = 0;
- switch (tipoSocio) {
- case "Profesor": ;
- tiempo=14;
- break;
- case "Alumno":
- tiempo=7;
- break;
- }
- return tiempo;
- }
- public void prestamoLibroDetalle(int libros,Libro[] libross) {
- int cantidadL=libros;
- switch (cantidadL) {
- case 1: Random aleatorio1= new Random();
- int numero=aleatorio1.nextInt(3);
- System.out.println(libross[numero].getCodigo()+" "+libross[numero].getNombre()+" "+libross[numero].getTema());
- break;
- case 2: Random aleatorio2=new Random();
- int num1=aleatorio2.nextInt(3);
- int num2=aleatorio2.nextInt(3);
- while (num1==num2){
- num2=aleatorio2.nextInt(3);
- }
- System.out.println(libross[num1].getCodigo()+" "+libross[num1].getNombre()+" "+libross[num1].getTema());
- System.out.println(libross[num2].getCodigo()+" "+libross[num2].getNombre()+" "+libross[num2].getTema());
- break;
- case 3:
- System.out.println(libross[0].getCodigo()+" "+libross[0].getNombre()+" "+libross[0].getTema());
- System.out.println(libross[1].getCodigo()+" "+libross[1].getNombre()+" "+libross[1].getTema());
- System.out.println(libross[2].getCodigo()+" "+libross[2].getNombre()+" "+libross[2].getTema());
- break;
- }
- }
- public int getNumeroSocio() {
- return numeroSocio;
- }
- public void setNumeroSocio(int numeroSocio) {
- this.numeroSocio = numeroSocio;
- }
- public String getTipoS() {
- return tipoS;
- }
- public void setTipoS(String tipoS) {
- this.tipoS = tipoS;
- }
- }
- //Clase LIBRO
- package punto1;
- public class Libro {
- private String codigo;
- private String nombre;
- private String tema;
- public Libro(String codigo,String nombre, String tema){
- this.codigo=codigo;
- this.nombre=nombre;
- this.tema=tema;
- }
- public String getCodigo() {
- return codigo;
- }
- public void setCodigo(String codigo) {
- this.codigo = codigo;
- }
- public String getNombre() {
- return nombre;
- }
- public void setNombre(String nombre) {
- this.nombre = nombre;
- }
- public String getTema() {
- return tema;
- }
- public void setTema(String tema) {
- this.tema = tema;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement