Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package CadenaMontaje;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.concurrent.BlockingQueue;
- import java.util.concurrent.LinkedBlockingQueue;
- public class AlmacenPiezas {
- public static int MAX_PIEZAS = 5;
- private List<BlockingQueue<Double>> colas; //Lista de blockingueues
- public AlmacenPiezas(int numTiposPieza){
- List<BlockingQueue<Double>> colasAux = new ArrayList<BlockingQueue<Double>> ();
- for(int i =0; i<numTiposPieza; i++){
- colasAux.add(new LinkedBlockingQueue<Double>(MAX_PIEZAS));
- }
- colas = new ArrayList<BlockingQueue<Double>> (colasAux);
- }
- public void almacenarPieza(int tipoPieza, double pieza) throws InterruptedException{
- colas.get(tipoPieza).put(pieza);
- }
- public double recogerPieza (int tipoPieza) throws InterruptedException{
- return colas.get(tipoPieza).take();
- }
- }
- //--------------------------------------------------------------------------------------//
- package CadenaMontaje;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- public class CadenaMontaje {
- private static int NUM_TIPOS_PIEZAS = 3;
- private static int NUM_ROBOTS = 3;
- private AlmacenPiezas almacen = new AlmacenPiezas(NUM_TIPOS_PIEZAS);
- private void montarPieza(int tipoPieza, double pieza) throws InterruptedException{
- Thread.sleep((long) Math.random()*1000);
- System.out.println(Thread.currentThread().getName()+ ": " + pieza);
- }
- public void robot(int numRobot){
- try {
- while(true){
- for(int i =0 ; i<NUM_TIPOS_PIEZAS; i++){
- double pieza = almacen.recogerPieza(i);
- montarPieza(i, pieza);
- }
- }
- }catch (InterruptedException ex) {
- Logger.getLogger(CadenaMontaje.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- private double fabricarPieza(int tipoPieza) throws InterruptedException{
- Thread.sleep( (long)Math.random()*1000);
- double pieza = tipoPieza+Math.random();
- System.out.println(Thread.currentThread().getName()+ ": "+pieza);
- return pieza;
- }
- public void maquina(int numMaquina, int tipoPieza) {
- try {
- while(true){
- double pieza = fabricarPieza(tipoPieza);
- almacen.almacenarPieza(tipoPieza, pieza);
- }
- }catch (InterruptedException ex) {
- Logger.getLogger(CadenaMontaje.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- public void exec() {
- for (int i = 0; i < NUM_TIPOS_PIEZAS; i++) {
- int numMaquina = i;
- new Thread(() -> maquina(numMaquina, numMaquina), "Maquina-" + numMaquina).start();
- }
- for (int i = 0; i < NUM_ROBOTS; i++) {
- int numRobot = i;
- new Thread(() -> robot(numRobot), "Robot-" + numRobot).start();
- }
- }
- public static void main(String[] args) {
- new CadenaMontaje().exec();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement